Чому vi і sudo vi надають мені іншу версію vim?


2

Версія за замовчуванням vi, яка постачається з Ubuntu Hardy, - це 7.1 або 7.2. Тому я встановив vim 7.3 з джерел.

Потім, щоб було зручніше, я додав це до свого .bashrc

alias vi='vim'

Для того щоб дозволити 7.3 vim перезаписати vi, який є старою версією. Це добре працює для мене, але коли до цього додаю судо, щось подібне

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

Це дає мені стару версію

Хто-небудь дасть мені поняття, чому це?

Відповіді:


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 cmdsudo -i cmd

По-друге, bash буде розширювати псевдоніми лише тоді, коли він запускається в інтерактивному режимі, а не при запуску як , що і для чого використовується. (Знову ж таки, це можна змінити, але типовим налаштуванням є лише інтерактивне розширення псевдонімів.)bash -c cmdsudo


ну, видалено шахту.
Сатьядхіт Бхат

3

Псевдоніми - це користувач. Ваша перша команда призначила псевдонім лише вашому непривілейованому користувачеві, а коли ви використовуєте sudo, він працює як root. Ви також повинні створити псевдонім для кореневого користувача.


0

Під час запуску sudo vi,

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

sudoсам по собі не обробляє .bashrcі не розширює псевдоніми; ці дві функції є частиною bash, яка sudoне працює (вона виконує команду безпосередньо).
grawity
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.