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

9

У меня есть сервер Centos 5.5, в котором есть собственные команды псевдонимов для моей учетной записи. Когда я делаю, sudo bashя все еще могу использовать эти псевдонимы, мне не нужно было добавлять псевдонимы к корню .bashrc.

У меня есть другой сервер, который является Centos 6.5. Но когда я выполню sudo bash, он не будет использовать мои псевдонимы пользователя, на котором я вошел как. Кто-нибудь знает, где я настраиваю его, чтобы включить псевдонимы пользователя, в который я вошел, когда я использую sudo bash?

Тайлер Кнотек
источник
Я думаю, что псевдонимы наследуются через среду, поэтому, возможно, ответ здесь сработает: unix.stackexchange.com/questions/92998/…
Barmar
5.5, вероятно, сохранил $ HOME от вызывающей стороны, в то время как 6.5 нет. Смотрите sudo sudo -Vвывод и env_keepна странице руководства sudoers.
Стефан Шазелас
1
Спасибо Бармар и Стефан. Оба ваших ответа указали мне правильное направление. Я должен был установить следующее в sudoers: Defaults !always_set_homeи Defaults !env_reset`
Тайлер Кнотек

Ответы:

6

Добавьте следующую строку в ваш ~ / .bashrc:

alias sudo='sudo '

Из руководства по bash

Псевдонимы позволяют заменить строку словом, если оно используется в качестве первого слова простой команды. Оболочка поддерживает список псевдонимов, которые можно устанавливать и удалять с помощью встроенных команд alias и unalias.

Первое слово каждой простой команды, если оно не заключено в кавычки, проверяется на наличие псевдонима. Если это так, это слово заменяется текстом псевдонима. Символы '/', '$', '`', '=' и любые метасимволы оболочки или символы цитирования, перечисленные выше, могут не отображаться в псевдониме. Текст замены может содержать любые допустимые входные данные оболочки, включая метасимволы оболочки. Первое слово замещающего текста проверяется на псевдонимы, но слово, идентичное раскрываемому псевдониму, не раскрывается во второй раз. Это означает, что, например, псевдоним ls можно присвоить «ls -F», и Bash не пытается рекурсивно развернуть текст замены. Если последний символ значения псевдонима является пробелом или символом табуляции, то следующее слово команды, следующее за псевдонимом, также проверяется на расширение псевдонима.

Таким образом, Bash проверяет только первое слово команды на наличие псевдонима, любые слова после этого не проверяются. Это означает, что в такой команде, как sudo ll, bash проверяет псевдоним только первое слово (sudo), ll игнорируется. Мы можем сказать bash проверить следующее слово после псевдонима (т.е. sudo), добавив пробел в конец значения псевдонима.

Antonizick
источник
Работает на Zsh, а также просто отлично. Спасибо!
Джи
Это просто позволяет использовать псевдонимы в sudoкоманде, например sudo some_alias ..., но OP спрашивает, как заставить псевдонимы, определенные для его собственного пользователя, работать после того, как он переключается на другого пользователя, используя sudo. Допустим, я some_aliasопределил. Когда я sudoс rootпомощью sudo su, новая среда создается и что псевдоним не определен там. Есть -Eпараметр sudoкоманды, который должен экспортировать окружение, но похоже, что псевдонимы не являются его частью.
Дэвид Ференци Рогожан
0

Используйте sudo -E, который будет экспортировать вашу среду.

Kaboom
источник
3
не включает псевдонимы (протестировано на Ubuntu 16.04.1)
Антониос Хаджигеоргалис
Это работает, но только как sudo -E bash. При использовании с suas, данные sudo -E su, определенные в user .bashrc(псевдонимы, приглашения и т. Д.), Не сохраняются, даже если в обоих случаях переменные среды сохраняются. Я не уверен, как именно это работает.
Дэвид Ференци Рогожан