я играл сегодня с псевдонимами и я заметил, что псевдонимы, кажется, не быть доступны при использовании 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?
Псевдонимы специфичны для пользователя - вам нужно определить их в /root/.bashrc
Я написал для него функцию Bash, которая затеняет sudo.
Он проверяет, есть ли у меня псевдоним для данной команды и запускается команда aliased вместо литеральной с sudo в этом case
Вот моя функция как однострочный:
sudo() { if alias "$1" &> /dev/null ; then $(type "$1" | sed -E 's/^.*`(.*).$/\1/') "${@:2}" ; else command sudo $@ ; fi }
Или красиво отформатирован:
sudo() {
if alias "$1" &> /dev/null ; then
$(type "$1" | sed -E 's/^.*`(.*).$/\1/') "${@:2}"
else
command sudo "$@"
fi
}
Вы можете добавить его в свой .bashrc, не забудьте указать его или перезапустить сеанс терминала после этого, чтобы применить изменения.
Ответ на главный голос - отличный. Однако, если вы наберете sudo -i и поднимите сообщение sudo (#), вы не будете использовать псевдонимы, которые хотите использовать.
Чтобы использовать ваши псевдонимы (и все остальное) в # prompt, use:
sudo cp "$PWD"/.bashrc /root/.bashrc
Где «$ PWD» автоматически расширяется в «/ home / YOUR_USER_NAME»
У меня есть другое решение, в котором вам не нужно добавлять sudo в качестве псевдонима. Я запускаю Linux Mint 17.3, но он должен быть очень похож на Ubuntu.
Когда вы являетесь пользователем root, тогда .profile запускается из его домашнего каталога. Если вы не знаете, что такое домашний каталог под root, вы можете проверить:
sudo su
echo $HOME
Как вы можете видеть, дом root - /root/. Проверьте его содержимое:
cd $HOME
ls -al
Должен быть файл .profile. Откройте файл и добавьте следующие строки:
if [ "$BASH" ]; then
if [ -f ~/.bash_aliases];then
. ~/.bash_aliases
fi
fi
В основном, этот скрипт bash выполняет проверку файла с именем .bash_aliases. Если файлы присутствуют, он выполняет файл.
Сохраните файл .profile и создайте свои псевдонимы в .bash_aliases. Если вы уже подготовили файл псевдонимов, скопируйте файл в это место
Перезапустите терминал, и вы готовы к работе!
У меня есть еще одно приятное решение, которое добавляет немного доверия:
Использовать завершение bash, чтобы автоматически заменить слова позади sudo своими псевдонимами при нажатии вкладки.
Сохранить это как /etc/bash_completion.d/sudo-alias.bashcomp, и он должен автоматически загружаться при запуске интерактивной оболочки:
_comp_sudo_alias() { from="$2"; COMPREPLY=()
if [[ $COMP_CWORD == 1 ]]; then
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
Затем войдите в новый терминал, и вам должно быть хорошо идти.
@Элвинами ответ самый короткий. Без сомнения! :-)
однако я думал, что решения командную строку для выполнения псевдонима команды в команду sudo, где нет необходимости переосмысления sudo с помощью команды alias.
вот мое предложение для тех, кого это может заинтересовать:
решениеtype -a <YOUR COMMAND HERE> | grep -o -P "(?<=\`).*(?=')" | xargs sudo
в случае ll команда
type -a ll | grep -o -P "(?<=\`).*(?=')" | xargs sudo
, когда у вас есть псевдоним (например: ll) команды нажать [F8] возвращает искаженные выражения:
$type -a ll
ll is aliased to `ls -l'
с [F9] и вы выделите текст между акцентом и апостроф ' в таком случае ls -l
и xargs выполняет выбранный текст ls -l, а параметр [от f13].
да, немного дольше, но выполнить псевдонима команды в судо ;-) не нужно переопределять sudo в качестве псевдонима.
Псевдонимы специфичны для пользователя - вам нужно определить их в /root/.bashrc
Я написал для него функцию Bash, которая затеняет sudo.
Он проверяет, есть ли у меня псевдоним для данной команды и запускается команда aliased вместо литеральной с sudo в этом case
Вот моя функция как однострочный:
sudo() { if alias "$1" &> /dev/null ; then $(type "$1" | sed -E 's/^.*`(.*).$/\1/') "${@:2}" ; else command sudo $@ ; fi }
Или красиво отформатирован:
sudo() {
if alias "$1" &> /dev/null ; then
$(type "$1" | sed -E 's/^.*`(.*).$/\1/') "${@:2}"
else
command sudo "$@"
fi
}
Вы можете добавить его в свой .bashrc, не забудьте указать его или перезапустить сеанс терминала после этого, чтобы применить изменения.
Ответ на главный голос - отличный. Однако, если вы наберете sudo -i и поднимите сообщение sudo (#), вы не будете использовать псевдонимы, которые хотите использовать.
Чтобы использовать ваши псевдонимы (и все остальное) в # prompt, use:
sudo cp "$PWD"/.bashrc /root/.bashrc
Где «$ PWD» автоматически расширяется в «/ home / YOUR_USER_NAME»
у меня есть другое решение, в котором вы не должны добавить sudo в качестве псевдонима. Я запускаю Линукс Минт 17.3, но он должен быть очень похож на Ubuntu.
когда вы root, то .profile запускается из своего домашнего каталога. Если Вы не знаете, что домашний каталог под корень, затем вы можете проверить с:
sudo su
echo $HOME
как вы можете видеть, дом root это /root/. Проверьте его содержимое:
cd $HOME
ls -al
должен быть файл .profile. Откройте файл и добавьте следующие строки:
if [ "$BASH" ]; then
if [ -f ~/.bash_aliases];then
. ~/.bash_aliases
fi
fi
в общем, что этот скрипт делает это, чтобы проверить файл на [F9]. Если файлы присутствуют, он выполняет файл.
сохранить [F10] для файл и создавать свои псевдонимы на [F11]. Если у вас уже есть файл aliases готов, затем скопируйте файл в эту папку
повторно запустите терминал и вы хорошо идти!
У меня есть еще одно приятное решение, которое добавляет немного доверия:
Использовать завершение bash, чтобы автоматически заменить слова позади sudo своими псевдонимами при нажатии вкладки.
Сохранить это как /etc/bash_completion.d/sudo-alias.bashcomp, и он должен автоматически загружаться при запуске интерактивной оболочки:
_comp_sudo_alias() { from="$2"; COMPREPLY=()
if [[ $COMP_CWORD == 1 ]]; then
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
Затем войдите в новый терминал, и вам должно быть хорошо идти.
Ответ @Alvins является самым коротким. Без сомнений! : -)
Однако я подумал о решении командной строки для выполнения команды aliased в sudo, где нет необходимости переопределять sudo с помощью команды alias.
Здесь мое предложение для тех, кому это может быть интересно:
type -a <YOUR COMMAND HERE> | grep -o -P "(?<=\`).*(?=')" | xargs sudo
В случае команды ll
type -a ll | grep -o -P "(?<=\`).*(?=')" | xargs sudo
, когда у вас есть псевдоним (например: ll), команда type -a возвращает выражение с псевдонимом:
$type -a ll
ll is aliased to `ls -l'
с grep вы выбираете текст между акцентом `и апострофом 'в этом случае ls -l
И xargs выполняет выделенный текст ls -l как параметр sudo.
Да, немного дольше, но выполняет команду aliased в sudo ;-) Нет необходимости переопределять sudo как псевдоним.
псевдонимы конкретного пользователя - нужно их определять в /root/.bashrc
Я написал для него функцию Bash, которая затеняет sudo.
Он проверяет, есть ли у меня псевдоним для данной команды и запускается команда aliased вместо литеральной с sudo в этом case
Вот моя функция как однострочный:
sudo() { if alias "$1" &> /dev/null ; then $(type "$1" | sed -E 's/^.*`(.*).$/\1/') "${@:2}" ; else command sudo $@ ; fi }
Или красиво отформатирован:
sudo() {
if alias "$1" &> /dev/null ; then
$(type "$1" | sed -E 's/^.*`(.*).$/\1/') "${@:2}"
else
command sudo "$@"
fi
}
Вы можете добавить его в свой .bashrc, не забудьте указать его или перезапустить сеанс терминала после этого, чтобы применить изменения.
Ответ на главный голос - отличный. Однако, если вы наберете sudo -i и поднимите сообщение sudo (#), вы не будете использовать псевдонимы, которые хотите использовать.
Чтобы использовать ваши псевдонимы (и все остальное) в # prompt, use:
sudo cp "$PWD"/.bashrc /root/.bashrc
Где «$ PWD» автоматически расширяется в «/ home / YOUR_USER_NAME»
У меня есть другое решение, в котором вам не нужно добавлять 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
. Если вы уже подготовили файл псевдонимов, скопируйте файл в это место
Перезапустите терминал, и вы готовы к работе!
Высший проголосовавший ответ - отличный. Однако, если вы наберете sudo -i
и поднимите сообщение sudo ( #
), вы не будете использовать псевдонимы, которые хотите использовать.
To используйте свои псевдонимы (и все остальное) в приглашении #
, используйте:
sudo cp "$ PWD" /. bashrc /root/.bashrc
Где «$ PWD» автоматически расширяется до «/ home / YOUR_USER_NAME»
@ Алвинс самый короткий. Без сомнений! : -)
Однако я подумал о решении командной строки для выполнения команды 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]
Псевдонимы специфичны для пользователя - вам нужно определить их в /root/.bashrc
Я написал для него функцию Bash, которая затеняет sudo
.
Он проверяет, имеет ли я псевдоним для данной команды и запускает команду aliased вместо буквенного с sudo
в этом случае.
Вот моя функция как однострочный:
sudo () {если псевдоним «$ 1» & amp; gt; ; / dev / null; затем $ (введите «$ 1» | sed -E '/ ^ .* `(. *). $ / \ 1 /')" $ {@: 2} "; else command sudo $ @; fi}
Или красиво отформатирован:
sudo () {если псевдоним «$ 1» & gt; & gt; / dev / null; затем $ (введите «$ 1» | sed -E 's /^.* `(. *). $ / \ 1 /')" $ {@: 2} "else command sudo" $ @ "fi}
Вы можете добавить его в свой файл .bashrc
, не забудьте его загрузить или перезапустить сеанс терминала, чтобы применить изменения.
У меня есть еще одно приятное решение, которое добавляет немного доверия:
Использовать завершение 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
Затем войдите в новый терминал, и вам должно быть хорошо идти.
Псевдонимы специфичны для пользователя - вам нужно определить их в /root/.bashrc
Я написал для него функцию Bash, которая затеняет sudo
.
Он проверяет, имеет ли я псевдоним для данной команды и запускает команду aliased вместо буквенного с sudo
в этом случае.
Вот моя функция как однострочный:
sudo () {если псевдоним «$ 1» & amp; gt; ; / dev / null; затем $ (введите «$ 1» | sed -E '/ ^ .* `(. *). $ / \ 1 /')" $ {@: 2} "; else command sudo $ @; fi}
Или красиво отформатирован:
sudo () {если псевдоним «$ 1» & gt; & gt; / dev / null; затем $ (введите «$ 1» | sed -E 's /^.* `(. *). $ / \ 1 /')" $ {@: 2} "else command sudo" $ @ "fi}
Вы можете добавить его в свой файл .bashrc
, не забудьте его загрузить или перезапустить сеанс терминала, чтобы применить изменения.
Высший проголосовавший ответ - отличный. Однако, если вы наберете sudo -i
и поднимите сообщение sudo ( #
), вы не будете использовать псевдонимы, которые хотите использовать.
To используйте свои псевдонимы (и все остальное) в приглашении #
, используйте:
sudo cp "$ PWD" /. bashrc /root/.bashrc
Где «$ PWD» автоматически расширяется до «/ home / YOUR_USER_NAME»
@ Алвинс самый короткий. Без сомнений! : -)
Однако я подумал о решении командной строки для выполнения команды 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]
У меня есть еще одно приятное решение, которое добавляет немного доверия:
Использовать завершение 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
Затем войдите в новый терминал, и вам должно быть хорошо идти.
У меня есть другое решение, в котором вам не нужно добавлять 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
. Если вы уже подготовили файл псевдонимов, скопируйте файл в это место
Перезапустите терминал, и вы готовы к работе!
Псевдонимы специфичны для пользователя - вам нужно определить их в /root/.bashrc
sudo -s
или sudo -i
(и only < / i>, если он запускается сам по себе, чтобы получить корневую оболочку, not i> с командой sudo -s ...
или sudo -i command ...
) или sudo bash
или sudo su
, или ситуация, когда вы включили учетные записи root и таким образом имеете корневую оболочку. Когда пользователь, не являющийся пользователем root, запускает команду sudo ...
из своей оболочки, расширение псевдонима выполняется их собственной оболочкой без полномочий root. sudo
сам не расширяет псевдонимы, поэтому применительно к ситуации, описанной в вопросе i>, этот ответ неверен.
– Eliah Kagan
17 September 2017 в 10:31
Я написал для него функцию Bash, которая затеняет sudo
.
Он проверяет, имеет ли я псевдоним для данной команды и запускает команду aliased вместо буквенного с sudo
в этом случае.
Вот моя функция как однострочный:
sudo () {если псевдоним «$ 1» & amp; gt; ; / dev / null; затем $ (введите «$ 1» | sed -E '/ ^ .* `(. *). $ / \ 1 /')" $ {@: 2} "; else command sudo $ @; fi}
Или красиво отформатирован:
sudo () {если псевдоним «$ 1» & gt; & gt; / dev / null; затем $ (введите «$ 1» | sed -E 's /^.* `(. *). $ / \ 1 /')" $ {@: 2} "else command sudo" $ @ "fi}
Вы можете добавить его в свой файл .bashrc
, не забудьте его загрузить или перезапустить сеанс терминала, чтобы применить изменения.
Высший проголосовавший ответ - отличный. Однако, если вы наберете sudo -i
и поднимите сообщение sudo ( #
), вы не будете использовать псевдонимы, которые хотите использовать.
To используйте свои псевдонимы (и все остальное) в приглашении #
, используйте:
sudo cp "$ PWD" /. bashrc /root/.bashrc
Где «$ PWD» автоматически расширяется до «/ home / YOUR_USER_NAME»