Повторить предыдущую команду под sudo

Я хочу иметь возможность запустить команду, она не работает, потому что у нее нет необходимых разрешений. Затем я могу написать «пожалуйста», чтобы выполнить команду, которую я только что выполнил.

Вот что я хочу сделать в терминале:

$ run command
"you don't have access to do that"
$ please
"ran successfully"

Я видел, что !! получит предыдущую команду, поэтому я подумал, что могу использовать это, но не могу получить ее работа.

Мой сценарий оболочки please.sh выглядит следующим образом, но я не могу заставить что-либо из этого работать. Он просто говорит "команда не найдена !!" и распечатывает использование sudo.

#!/bin/zsh

#sudo !!
#sudo `!!`
sudo $(!!)
8
задан 19 July 2012 в 04:57

2 ответа

Добавьте в свой .zshrc:

alias please='sudo $(fc -ln -1)'
0
ответ дан 19 July 2012 в 04:57

Вы не можете использовать !! в сценарии оболочки, так как вы не можете получить доступ к родительской оболочке в дочерней оболочке. Хотя я рекомендую использовать sudo !!, если вы действительно хотите создать скрипт BASH, вам придется использовать .bash_history, например так:

#!/bin/bash
sudo `cat $HOME/.bash_history | tail -n1`

Это определенно НЕ идеальное решение, но оно должно делать трюк. Если вы используете ZSH, это не будет работать, так как ZSH не выводит в .bash_history (насколько мне известно). ОБНОВЛЕНИЕ : Вот версия, которая должна работать с ZSH:

#!/usr/bin/zsh
. $HOME/.zshrc
sudo `cat \`readlink -f $HISTFILE\` | tail -n1`

Надеюсь, это поможет!

Если вы не понимаете скрипт, он просто запускает последнюю команду, введенную в BASH, с помощью sudo.

0
ответ дан 19 July 2012 в 04:57

Другие вопросы по тегам:

Похожие вопросы: