Как я могу запускать пользовательские псевдонимы с помощью sudo? [dубликат]

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

danny@kaon:~$ alias alias egrep='egrep --color=auto' alias fgrep='fgrep --color=auto' alias grep='grep --color=auto' alias l='ls -CF' alias la='ls -A' alias ll='ls -alF' alias ls='ls --color=auto' danny@kaon:~$ ll -d / drwxr-xr-x 23 root root 4096 2011-01-06 20:29 // danny@kaon:~$ sudo -i root@kaon:~# ll -d / drwxr-xr-x 23 root root 4096 2011-01-06 20:29 // root@kaon:~# exit logout danny@kaon:~$ sudo ll -d / sudo: ll: command not found

есть ли причина, почему Вы не можете использовать псевдонимы при использовании sudo?

140
задан 18 January 2011 в 03:02

64 ответа

Ответ

@ Алвинс самый короткий. Без сомнений! : -)

Однако я подумал о решении командной строки для выполнения команды aliased в sudo, где нет необходимости переопределять sudo с псевдонимом

Вот мое предложение для тех, кому это может быть интересно:

Решение

  type -a & YOUR COMMAND HERE & gt;  |  grep -o -P "(? & lt; = \`). * (? = ') "|  xargs sudo  

Пример

В случае команды ll

  type -a ll |  grep -o -P "(? & lt; = \`). * (? = ') "|  xargs sudo  

Объяснение

, когда у вас есть псевдоним (например: ll ), команда типа -a ] возвращает выражение с псевдонимом:

  $ type -a ll ll является псевдонимом `ls -l ' 

с grep вы выбираете текст между акцентом `и апострофом 'в этом случае ls -l

И xargs выполняет выделенный текст ls -l как параметр sudo .

Да, немного дольше, но полностью чист ;-) Не нужно переопределять sudo как псевдоним. [ ! d24]

3
ответ дан 15 August 2018 в 00:15
  • 1
    Может быть проще, если вы использовали встроенный псевдоним , так как его вывод чище. alias ll выводит alias ll = 'ls -ahlF' . – muru 15 February 2015 в 23:41
  • 2
    Вот версия, включающая предложение @ muru: alias ll | sed "s / .* '\ (. * \)'. * / \ 1 / g" | xargs sudo . – ACK_stoverflow 27 July 2016 в 20:07
  • 3
    Я думаю, что исходный вопрос заключался в том, чтобы сохранить работу, не выполнив сначала sudo -i , чтобы запустить команду aliased, но сразу же это сделало. Такая сложная команда побеждает. Вы могли бы просто сделать первое, и быть намного быстрее. – Evi1M4chine 8 September 2017 в 18:13

У меня есть еще одно приятное решение, которое добавляет немного доверия:

Использовать завершение bash для автоматической замены слов позади sudo с их псевдонимами при нажатии вкладки.

Сохраните это как /etc/bash_completion.d/sudo-alias.bashcomp , и он должен автоматически загружаться при запуске интерактивной оболочки:

  _comp_sudo_alias (  ) {from = "$ 2";  COMPREPLY = (), если [[$ COMP_CWORD == 1]];  затем COMPREPLY = ("$ (alias -p | grep" ^ * alias $ from = "| sed -r" s / ^ * alias [^ =] + = '(. *)' $ / \ 1 / ")"  ) return 0 fi return 1} complete -o bashdefault -o default -F _comp_sudo_alias sudo  

Затем войдите в новый терминал, и вам должно быть хорошо идти.

1
ответ дан 15 August 2018 в 00:15
  • 1
    Есть способ получить список псевдонимов, специально предназначенных для завершения: compgen -a – muru 8 September 2017 в 20:04
  • 2
    @muru: Спасибо, но в этом случае мне нужны значения, а не ключи. Итак, какой псевдоним, который был введен, будет заменен. Вы вводите псевдоним (например, в sudo ll ), нажмите [TAB ↹], и сценарий находит ll в списке назначений псевдонимов, вырезает то, что ему назначено к нему, и вставляет это. (Таким образом, вы получите, например, sudo ls -lahvF --color = auto -time-style = long-iso .) – Evi1M4chine 9 September 2017 в 04:29

У меня есть другое решение, в котором вам не нужно добавлять sudo в качестве псевдонима. Я запускаю Linux Mint 17.3, но он должен быть очень похож на Ubuntu.

Когда вы являетесь пользователем root, тогда .profile запускается из его домашнего каталога. Если вы не знаете, что такое домашний каталог под root, вы можете проверить:

  sudo su echo $ HOME  

Как вы можете видеть, дом root - / root / . Проверьте его содержимое:

  cd $ HOME ls -al  

Должен быть файл .profile . Откройте файл и добавьте следующие строки:

 , если ["$ BASH"];  то если [-f ~ / .bash_aliases], то.  ~ / .bash_aliases fi fi  

В основном, этот скрипт bash выполняет проверку файла с именем .bash_aliases . Если файлы присутствуют, он выполняет файл.

Сохраните файл .profile и создайте свои псевдонимы в .bash_aliases . Если вы уже подготовили файл псевдонимов, скопируйте файл в это место

Перезапустите терминал, и вы готовы к работе!

0
ответ дан 15 August 2018 в 00:15

@ WinEunuuchs2Unix: $PWD расширяется до «настоящего рабочего каталога». Я думаю, вы хотите $HOME.

Кроме того, для большинства ситуаций, вероятно, лучше иметь отдельный файл .bashrc для root. Фактически, я сделал бы это реальный файл в /root, софт-ссылку на него в домашнем каталоге пользователя (например, .bashrc_root) и отправил его из файла .bashrc пользователя. Если в более позднее время эта привилегированная учетная запись пользователя больше не присутствует, файл root .bashrc по-прежнему доступен для других пользователей.

0
ответ дан 8 October 2018 в 06:22

Другие вопросы по тегам:

Похожие вопросы: