[shau-kote:~]% type vi 22:27 pts/0
vi is an alias for vim
[shau-kote:~]% su - 22:27 pts/0
Пароль:
[root:~]# type vi 22:27 pts/0
vi is an alias for vim
[root:~]# out 22:27 pts/0
[shau-kote:~]% vi -h 22:27 pts/0
VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Sep 4 2010 16:26:46)
<...>
[shau-kote:~]% sudo vim -h 22:29 pts/0
VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Sep 4 2010 16:26:46)
<...>
[shau-kote:~]% sudo vi -h 22:29 pts/0
vi: illegal option -- h
Usage: vi [- | -s] [-l] [-L] [-R] [-r [file]] [-t tag]
[-v] [-V] [-w size] [+cmd | -c cmd] file...
Как сделать так, чтобы sudo vi вызывала vim, а не vi?..
[shau-kote:~]% type vi 22:27 pts/0
vi is an alias for vim
[shau-kote:~]% su - 22:27 pts/0
Пароль:
[root:~]# type vi 22:27 pts/0
vi is an alias for vim
[root:~]# out 22:27 pts/0
[shau-kote:~]% vi -h 22:27 pts/0
VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Sep 4 2010 16:26:46)
<...>
[shau-kote:~]% sudo vim -h 22:29 pts/0
VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Sep 4 2010 16:26:46)
<...>
[shau-kote:~]% sudo vi -h 22:29 pts/0
vi: illegal option -- h
Usage: vi [- | -s] [-l] [-L] [-R] [-r [file]] [-t tag]
[-v] [-V] [-w size] [+cmd | -c cmd] file...
Как сделать так, чтобы sudo vi вызывала vim, а не vi?..
Псевдоним - это функция оболочки, а так как команда передаётся sudo как параметр, то для неё не подставляется псевдоним.
command искалась в рутовском $PATH, а не в пользовательском?
sudo должен найти полный путь к команде прежде чем сможет найти правило в sudoers и определить, можно ли выходить под рута. Поэтому он не может к этому времени выполнить никаких скриптов рута, в которых может быть прописан рутовский PATH. Продублируйте его в sudoers, опция secure_path.
sudo не работает с алиасами. Даже оболочка с ними работает только если запущена в интерактивном режиме. Т.е. алиасы работают только если вы их напрямую ввели в командной строке шелла. Во всех остальных случаях они игнорируются.
И ещё: в большинстве случаев не стоит запускать редактор от рута. Почитайте man sudo на предмет опции -e.
sudo не работает с алиасами. Даже оболочка с ними работает только если запущена в интерактивном режиме. Т.е. алиасы работают только если вы их напрямую ввели в командной строке шелла. Во всех остальных случаях они игнорируются.
То есть заставить sudo вызывать команды через алиасы не представляется возможным?
Эмм... А кроме наличия опции -e на это есть какие-то причины?
Да. Если позволить кому-то запускать редактор от имени рута, это позволит ему делать всё, т.к. большинство редакторов позволяют открывать другие файлы, когда редактор уже запущен. Опция -e позволяет выдать права на редактирование строго определённых файлов.
А автодополнение команды, как я понимаю, работает только в том случае, если вводимая команда есть в PATH юзера?.. Или можно настроить и так, чтобы и для команд, которые есть только в PATH root'а шелл дополнял команду?
А автодополнение команды, как я понимаю, работает только в том случае, если вводимая команда есть в PATH юзера?.. Или можно настроить и так, чтобы и для команд, которые есть только в PATH root'а шелл дополнял команду?
речь про bash-completion?
поставьте человеческую (менее урезанную или более новую) версию.
в debian (например), прекрасно работает дополнение имён программ, находящихся в /sbin:/usr/sbin:/usr/local/sbin, после ввода "sudo ".
Нет, речь про zsh. В смысле шелл имеет потенциальную возможность производить поиск команды для дополнения в PATH root'а?..
По идее-то в момент набирания пользователем команды шелл про PATH root'а не знает и доступа к нему не имет...
По идее-то в момент набирания пользователем команды шелл про PATH root'а не знает и доступа к нему не имет...
В bash-completion он, если команда начинается с sudo, просто добавляет к PATH его же, но заменив "/bin/" на "/sbin/". Как правило, этого хватает.
Можно ли аналогичным образом запрограммировать автодополнение в zsh - не знаю.
В bash-completion он, если команда начинается с sudo, просто добавляет к PATH его же, но заменив "/bin/" на "/sbin/". Как правило, этого хватает.
Можно ли аналогичным образом запрограммировать автодополнение в zsh - не знаю.
По идее-то в момент набирания пользователем команды шелл про PATH root'а не знает и доступа к нему не имет...
В bash-completion он, если команда начинается с sudo, просто добавляет к PATH его же, но заменив "/bin/" на "/sbin/". Как правило, этого хватает.
Можно ли аналогичным образом запрограммировать автодополнение в zsh - не знаю.
Разумеется. Вот, например:
(Created by format.vim)
# Написание $path маленькими буквами сделано намеренно и не является ошибкой.# См. «man zshparam» (второй абзац в секции «PARAMETERS USED BY THE SHELL»)zstyle':completion:*:sudo:*' command-path $path /sbin /usr/sbin /usr/local/sbin