Иногда, когда я запускаю команду, я не замечаю, что мне нужно было запускать ее как суперпользователь, чтобы иметь достаточные права.
Есть ли способ запустить ту же команду еще раз, но как суперпользователь?
Ответ : Вы входите sudo !!
прямо впоследствии повторить предыдущую команду с наращиваемыми полномочиями.
править: Изображение нашло через reddit, и это - пародия на исходного xkcd комика Randall Munroe.
Вы можете использовать клавишу со стрелкой вверх, чтобы прокрутить старые команды, переписать / изменить их и добавить перед ними sudo
. (кнопка «Домой» над клавишами со стрелками устанавливает положение в начале.)
Мне не нравится идея sudo !!
, потому что иногда вы добавляете другую команду между ними и больше не помните.
Есть несколько способов сделать это
Просто введите команду еще раз, добавив sudo
перед командой
Нажмите Стрелка вверх kbd>, чтобы получить последнюю команду и поставить перед ней sudo
.
Введите sudo !!
!!
расширяется до последней введенной команды. Вы можете делать подобные вещи с другими вещами с историей командной строки, см. здесь
Самый простой способ - запустить:
sudo !!
Это будет запускать последнюю команду, но как суперпользователь.
Источник .
Я просто добавлю альтернативу: такой же короткий , как набор 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 +») «Как один ...», но, добавив «стрелку вверх», вы можете сделать это в зависимости от того, какая команда есть в вашей истории.
Этот вопрос, возможно, был обобщен в "Выполненный та же команда, но с некоторой модификацией", начиная с одного из блестящих проектных решений в 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
И намного больше, так как можно объединить выбор команды, выбор аргумента, поиск и замену независимо.
Страница справочника Вашей оболочки (в этом случае man bash
) Ваш друг.
su -c "!!"
Если у вас нет прав для root-доступа с помощью sudo или sudo, программа не установлена в системе.
Я использую zsh вместо bash, и у меня это есть в ~/.zshrc
, поэтому нажатие Alt kbd> + S kbd> вставляет sudo
в начале командной строки:
insert_sudo () { zle beginning-of-line; zle -U "sudo " }
zle -N insert-sudo insert_sudo
bindkey "^[s" insert-sudo
К сожалению, я не смог найти способ сделать то же самое в bash.
Как я предпочитаю:
Но может быть проще просто сделать «sudo !!», решать только вам.
Если вы хотите сделать это под псевдонимом, вы должны использовать alias redo='sudo $(history -p !!)'
по некоторым причинам.