2

Версией vi по умолчанию, которая поставляется с Ubuntu Hardy, является 7.1 или 7.2. Поэтому я установил vim 7.3 из источников.

Затем, чтобы сделать это удобным, я добавил это в свой .bashrc

alias vi='vim'

Чтобы позволить vim 7.3 перезаписать vi, это старая версия. Это хорошо работает для меня, но когда я добавляю sudo до этого, что-то вроде

sudo vi /usr/local/nginx/conf/nginx.conf

Это дает мне старую версию

Кто-нибудь подскажет, почему?

3 ответа3

3

Псевдонимы для каждого пользователя. Ваша первая команда присвоила псевдоним только вашему непривилегированному пользователю, и когда вы используете sudo, он запускается от имени пользователя root. Вы также должны создать псевдоним для пользователя root.

3

vi 7.2 и 7.3 не существует. Существует только vi 050325 и vim 7.2, две совершенно разные программы с похожими функциями. Если вы хотите vim, введите vim .


Причина, по которой ваш псевдоним не работает, состоит в том, что псевдонимы расширяются вашей оболочкой, и оболочка не знает, что будет делать каждая программа, - она видит « sudo » в качестве команды и « vi myfile » в качестве аргументов и пытается только расширить первое слово, « sudo », не осмеливаясь прикасаться к аргументам.

Вы можете сказать bash расширять псевдонимы, следуя определенным командам, добавив псевдоним, такой как: (обратите внимание, пробел внутри кавычек необходим)

alias sudo="sudo "

Пробел скажет bash, что первое слово после « sudo » - это команда, которая должна быть развернута - например, "sudo vi ..." для « sudo vim ... » теперь будет работать.


Ответы о /root/.bashrc неверны по нескольким причинам. Во-первых, sudo выполняет данную команду без запуска оболочки. (Это можно изменить с помощью sudo -s cmd или sudo -i cmd , но если ни одна из этих опций не указана, по умолчанию выполняется команда напрямую, без оболочки.)

Во-вторых, bash будет расширять псевдонимы только при запуске в интерактивном режиме, а не при запуске с использованием команды bash -c cmd , которую sudo будет использовать. (Опять же, это можно изменить, но по умолчанию используется только интерактивное расширение псевдонимов.)

0

Когда запускаешь sudo vi ,

  1. sudo загружает файл /root/.bashrc . И он решает, является ли он псевдонимом или оригиналом (который является vim).
  2. Затем часть vi анализирует /root/.vimrc если он существует. В противном случае /etc/vim/vimrc

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .