Як я можу "псевдонім судо !!"?


50

Я намагаюся встановити псевдонім sudo !!у Bash. Я спробував alias sbb='sudo !!', але це трактує як буквальне !!і друкує

sudo: !!: command not found

Якщо я використовую подвійні лапки, він замінює подвійний удар у самій строці, так що це не працює.

Чи є якийсь спосіб зробити цю роботу? Або альтернативний псевдонім? `



Відповіді:


61

!!розширюється bash при введенні. Він не розширюється шляхом підстановки псевдонімом.

Ви можете використовувати historyвбудований для розширення:

alias sbb='sudo $(history -p !!)'

Якщо команда - це більше, ніж проста команда (наприклад, вона містить перенаправлення або труби), вам потрібно викликати оболонку під sudo:

alias sbb='sudo "$BASH" -c "$(history -p !!)"'

Отримав один за tcsh?
mdpc

1
@mdpc: Я не використовую tcsh, але я поглянув на man tcshі виявив, що він робить розширення історії під час розширення псевдоніму "так, ніби оригінальна команда була попереднім рядком введення". Цікаво. Однак alias sbb 'sudo \!-2він не працював так, як очікувалося (він фактично замінив другий попередній запис); alias sbb 'sudo \!\!'зробив роботу , як і очікувалося (заміщений sbbна !!); і врешті-решт виявилося, що те, що я хотів, - це те, alias sbb 'sudo \!-1'чого я б очікував, що це те саме \!\!. (tcsh 6.17.06 (Astron) 2011-04-15) YMMV. Удачі.
rici

Дякую! Цей псевдонім чудовий, коли як адміністратор ви забудете поставити sudo перед вашою командою.
mdpc

замість цього sbbя вважаю за краще preaseпсевдонім, як запропонував @jpschorr
rubo77

40

Спробуйте:

alias sbb='sudo $(fc -ln -1)'

Мені подобається насправді вважати це "будь ласка":

alias please='sudo $(fc -ln -1)'

Інформація: fcце вбудована команда в оболонці bash. що перераховує, редагує та повторно виконує команди, раніше введені в інтерактивну оболонку.


13
pleaseце, безумовно, шлях!
Анто-

працює і для bash, тому вилучено коментар "for zsh".
Майкл Дюрант

1
Добре працює в zsh. fc - команда для використання. Спасибі
Frax

pleaseвідчуває, що термінал - це сутність, до якої я повинен бути приємний , щоб зробити речі. Я вважаю за краще щось, що дає краще відчуття контролю - як fuck;)
Przemek D

5

Тепер у GitHub є сховище для цієї мети, воно магічно перевіряє, чи потрібні йому права суперпользователя, а також виправляє помилки друку:

https://github.com/nvbn/thefuck


Я спробував, apt-get install thefuckщо існує, але він не працює на моєму Ubuntu 15.10; (
rubo77

0

Це спочатку було розміщено під цим питанням, але пізніше запропоновано опублікувати тут.

Ось як можна використовувати fcі historyпсевдонім для !-подібних підстановок. Припустимо, якщо ви хочете використовувати !-n(де n - цифра для n- ї останньої використаної команди), ви можете використовувати fcта historyз псевдонімом наступне:

  1. Використання history:

    alias xyz='echo $(history -p "!-<n>") ; sudo $(history -p "!-n")'

    Примітка. Тут !-nслід додати 'або ''.

  2. Використання fc:

    alias xyz='echo $(fc -ln -n -n) ; sudo $(fc -ln -n -n)'

    Примітка: тут 1 - й і 2 - й -n , використовується для завдання діапазону списку історії.

Тут я використав лунання перед виконанням команди для рубки !-<n>.


Попередні відповіді вже охоплюють history -pі fc. Щось нового тут?
муру

Гаразд, що з цього?
муру

Я вважаю, що -ln -n -nце дуже заплутано; також біт про 'або ''(і також трохи про -<n>).
Скотт

Варіант 2. Має бути помилка $(fc -ln -1)
друку

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.