Я хочу иметь возможность запустить команду, она не работает, потому что у нее нет необходимых разрешений. Затем я могу написать «пожалуйста», чтобы выполнить команду, которую я только что выполнил.
Вот что я хочу сделать в терминале:
$ run command
"you don't have access to do that"
$ please
"ran successfully"
Я видел, что !!
получит предыдущую команду, поэтому я подумал, что могу использовать это, но не могу получить ее работа.
Мой сценарий оболочки please.sh выглядит следующим образом, но я не могу заставить что-либо из этого работать. Он просто говорит "команда не найдена !!" и распечатывает использование sudo.
#!/bin/zsh
#sudo !!
#sudo `!!`
sudo $(!!)
Добавьте в свой .zshrc:
alias please='sudo $(fc -ln -1)'
Вы не можете использовать !!
в сценарии оболочки, так как вы не можете получить доступ к родительской оболочке в дочерней оболочке. Хотя я рекомендую использовать sudo !!
, если вы действительно хотите создать скрипт BASH, вам придется использовать .bash_history, например так:
#!/bin/bash
sudo `cat $HOME/.bash_history | tail -n1`
Это определенно НЕ идеальное решение, но оно должно делать трюк. Если вы используете ZSH, это не будет работать, так как ZSH не выводит в .bash_history (насколько мне известно). s> ОБНОВЛЕНИЕ : Вот версия, которая должна работать с ZSH:
#!/usr/bin/zsh
. $HOME/.zshrc
sudo `cat \`readlink -f $HISTFILE\` | tail -n1`
Надеюсь, это поможет!
Если вы не понимаете скрипт, он просто запускает последнюю команду, введенную в BASH, с помощью sudo.