Ответы:
Самый простой способ - запустить:
sudo !!
Это запустит последнюю команду, но как суперпользователь.
Источник .
!!
самостоятельно запускает вашу предыдущую команду согласно сохраненной в history
. Кроме того, делать !-1
, !-2
и так далее выполняет свою последнюю команду, вторую последнюю команду, и так далее. Handy!
!<command>
будет выполнять последнее событие с ~/.bash_history
этого начала<command>
!
копия, созданная с помощью bash, tcsh
приводила меня в замешательство больше, чем когда-либо. Двойные кавычки не защищают от интерпретации !
. $ foo "!bar"
-> !bar: event not found
.
ответ : вы вводите sudo !!
сразу после этого, чтобы повторить предыдущую команду с повышенными привилегиями.
редактировать: изображение, найденное через Reddit , и это пародия на оригинальный комикс xkcd Рэндалла Манро.
Вы можете использовать клавишу со стрелкой вверх, чтобы прокрутить ваши старые команды, переписать / изменить их и добавить sudo
перед ними. (кнопка «Домой» над клавишами со стрелками установит позицию в начало.)
Мне не нравится эта sudo !!
идея, потому что иногда вы добавляете другую команду между ними и больше не помните.
sudo !!
, оболочка развернется !!
, и вы сможете увидеть, какую команду она пытается запустить. Таким образом, может вызвать раздражение, когда вы нажмете Ctrl-C и найдете правильную команду, но это, по крайней мере, не заставит вас застать врасплох.
!!
sudo !!<TAB>
и он автоматически заполняется !!
для меня. Bash может расширить историю с помощью M-^
(для меня alt + shift + 6), но это не так легко (хотя вы можете перепривязать это). Существует также shopt -s histverify
, что делает так, что когда вы используете раскрытие истории и нажимаете ввод, вместо этого выдается еще одна строка подсказки с выполненным расширением, чтобы вы могли ее увидеть / отредактировать.
shopt -s histverify
не поможет ни капли . Большинство людей привыкнет наносить удары Enter
дважды. В этот момент они еще слишком поздно, чтобы проверить, что случилось.
Я просто добавлю альтернативу: короткую, как печатать, sudo !!
и более гибкую:
Up-arrow (once, or until you find the command you want to sudo/edit, if it's older)
ctrl+A (place cursor at beginning of line)
"sudo "
Enter
Это точно такое же количество нажатий клавиш (я считаю "ctrl + A" как один ...), но добавив "стрелку вверх", вы можете сделать это с любой командой в вашей истории.
set -o vi
). Затем вы можете Escape (перейти в командный режим), а затем «I» (заглавная «i», вставить в начале строки).
Есть несколько способов сделать это
Просто введите команду еще раз, добавив sudo
перед командой
Нажмите, Up arrowчтобы получить последнюю команду и поставить sudo
перед ней.
Войти sudo !!
В !!
разрастается до последней введенной команды. Вы можете делать подобные вещи с другими вещами с историей командной строки, смотрите здесь
Этот вопрос можно было бы обобщить на « Выполнить ту же команду, но с некоторой модификацией », поскольку одно из блестящих дизайнерских решений в Unix заключается в том, что то, что реализовано однажды в оболочке, может быть использовано любой командой, вызываемой из оболочки.
Другими словами, этот трюк не относится только к sudo
:
sudo !!
)time !!
)env A=b B=z !!
)!!
)Расширение истории (также известное как подстановка истории) - это просто функция оболочки, облегчающая повторение предыдущих команд (с меньшим количеством нажатий клавиш). Проверьте свою страницу руководства оболочки для history expansion
. Он описывает еще много трюков и ярлыков, которые вы можете сделать с историей, например:
Вы можете ссылаться на предыдущие команды по номеру:
!55 # repeat command number 55
!-1 # repeat the previous command, alias for !!
!-2 # repeat the command before the previous command
Вы можете ссылаться на отдельные слова в предыдущих командах:
some-command !$ # run some-command on the last arg of previous command
Вы также можете выполнить поиск перед повторением:
!?awk # repeat the last command including the string 'awk'
Вы можете искать в истории и заменить что-то другим:
!?awk?:s/str1/str2/ # repeat previous command matching 'awk' replacing str1 by str2
И многое другое, так как вы можете комбинировать команды выбора, arg-selection, поиска и замены независимо.
Страница man вашей оболочки (в данном случае man bash
) - ваш друг.
Я использую zsh вместо bash, и у меня это есть ~/.zshrc
, поэтому нажатие Alt+ Sвставляет sudo
в начало командной строки:
insert_sudo () { zle beginning-of-line; zle -U "sudo " }
zle -N insert-sudo insert_sudo
bindkey "^[s" insert-sudo
К сожалению, я не смог найти способ сделать то же самое в bash.
Если вы хотите сделать это в псевдониме, вы должны использовать alias redo='sudo $(history -p !!)'
по какой-то причине.
То, как я предпочитаю это:
Но может быть проще просто сделать "sudo !!", решать только вам.