2015-07-12 3 views
1

Я добавил следующую пользовательскую функцию в свой ~/.zshrc, но я получаю команду не найденной, когда я запускаю ее с помощью sudo.Почему моя пользовательская команда не работает над sudo в zsh?

woodo() { 
    if [ $EUID != 0 ]; then 
     echo "It's a weird tree." 
    else 
     echo '  _    __' 
     echo ' /`\ (~._ ./ )' 
     echo ' \__/ __`-_\__/ ./' 
     echo ' _ \ \/ \ \ |_ __' 
     echo ' ( ) \__/ -^ \/\' 
     echo ' \_/ " \ | o o |../__' 
     echo "  \\. --' ====/||/\\ " 
     echo '   \ . . |---__.\__/' 
     echo '  /: / | |' 
     echo '  / : / \_/' 
     echo '  --/ :: (' 
     echo '  ( |  ( (____' 
     echo ' .-- .. ----**.____)' 
     echo ' \___/   ' 
    fi 
} 

$ woodo 
It's a weird tree. 
$ sudo woodo 
sudo: woodo: command not found 

Я также изменил его проверить $UID (как это было предложено here), но все равно это не будет работать:

... 
if [[ $UID !=0 || $EUID != 0 ]]; then 
... 

ответ

1

Это sudo woodo работает woodo как корень, а не как обычный пользователь. Я не эксперт по sudo, но я предполагаю, что начинается новая оболочка, возможно, bash не zsh, как root. Поэтому ваш личный ~/.zshrc не участвует. И даже если sudo использует zsh, он может инициализироваться /root/.zshrc.

В любом случае, ваш личный ~/.zshrc не используется под sudo.

+0

Спасибо! Я добавил это как файл в '/ usr/local/bin' и работает сейчас. – avi

+0

'sudo' требует исполняемого файла, что-то, что он может передать' execve', в качестве команды для запуска. Функции оболочки, псевдонимы и другие произвольные команды оболочки исключены. – chepner

Смежные вопросы