я играл сегодня с псевдонимами и я заметил, что псевдонимы, кажется, не быть доступны при использовании 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?
Добавьте следующую строку в свой ~/.bashrc:
alias sudo='sudo '
Из руководства bash:
Псевдонимы позволяют заменить строку на слово, когда оно используется как первое слово простой команды. Оболочка поддерживает список псевдонимов, которые могут быть установлены и не установлены с помощью команд alias и unalias builtin. Первое слово каждой простой команды, если не указано, проверяется на наличие псевдонима. Если это так, это слово заменяется текстом псевдонима. Символы '/', '$', '`', '=' и любые метасимволы оболочки или цитируемые выше символы могут не отображаться в псевдониме. Текст замены может содержать любой допустимый ввод оболочки, включая метасимволы оболочки. Первое слово заменяющего текста проверяется на псевдонимы, но слово, которое совпадает с расширяемым псевдонимом, не разворачивается во второй раз. Это означает, что можно, например, псевдоним ls -F, и Bash не пытается рекурсивно расширять заменяющий текст. Если последним символом значения псевдонима является пробел или символ табуляции, тогда следующее командное слово, следующее за псевдонимом, также проверяется на расширение псевдонима.(Акцент мой). Bash только проверяет первое слово команды для псевдонима, любые слова после этого не проверяются. Это означает, что в команде, подобной sudo ll, только первое слово (sudo) проверяется bash для псевдонима, ll игнорируется. Мы можем сказать bash, чтобы проверить следующее слово после псевдонима (i.e sudo), добавив пробел в конец значения псевдонима.
Добавьте следующую строку в свой ~/.bashrc:
alias sudo='sudo '
Из руководства bash:
Псевдонимы позволяют заменить строку на слово, когда оно используется как первое слово простой команды. Оболочка поддерживает список псевдонимов, которые могут быть установлены и не установлены с помощью команд alias и unalias builtin. Первое слово каждой простой команды, если не указано, проверяется на наличие псевдонима. Если это так, это слово заменяется текстом псевдонима. Символы '/', '$', '`', '=' и любые метасимволы оболочки или цитируемые выше символы могут не отображаться в псевдониме. Текст замены может содержать любой допустимый ввод оболочки, включая метасимволы оболочки. Первое слово заменяющего текста проверяется на псевдонимы, но слово, которое совпадает с расширяемым псевдонимом, не разворачивается во второй раз. Это означает, что можно, например, псевдоним ls -F, и Bash не пытается рекурсивно расширять заменяющий текст. Если последним символом значения псевдонима является пробел или символ табуляции, тогда следующее командное слово, следующее за псевдонимом, также проверяется на расширение псевдонима.(Акцент мой). Bash только проверяет первое слово команды для псевдонима, любые слова после этого не проверяются. Это означает, что в команде, подобной sudo ll, только первое слово (sudo) проверяется bash для псевдонима, ll игнорируется. Мы можем сказать bash, чтобы проверить следующее слово после псевдонима (i.e sudo), добавив пробел в конец значения псевдонима.
Добавьте следующую строку в свой ~/.bashrc:
alias sudo='sudo '
Из руководства bash:
Псевдонимы позволяют заменить строку на слово, когда оно используется как первое слово простой команды. Оболочка поддерживает список псевдонимов, которые могут быть установлены и не установлены с помощью команд alias и unalias builtin. Первое слово каждой простой команды, если не указано, проверяется на наличие псевдонима. Если это так, это слово заменяется текстом псевдонима. Символы '/', '$', '`', '=' и любые метасимволы оболочки или цитируемые выше символы могут не отображаться в псевдониме. Текст замены может содержать любой допустимый ввод оболочки, включая метасимволы оболочки. Первое слово заменяющего текста проверяется на псевдонимы, но слово, которое совпадает с расширяемым псевдонимом, не разворачивается во второй раз. Это означает, что можно, например, псевдоним ls -F, и Bash не пытается рекурсивно расширять заменяющий текст. Если последним символом значения псевдонима является пробел или символ табуляции, тогда следующее командное слово, следующее за псевдонимом, также проверяется на расширение псевдонима.(Акцент мой). Bash только проверяет первое слово команды для псевдонима, любые слова после этого не проверяются. Это означает, что в команде, подобной sudo ll, только первое слово (sudo) проверяется bash для псевдонима, ll игнорируется. Мы можем сказать bash, чтобы проверить следующее слово после псевдонима (i.e sudo), добавив пробел в конец значения псевдонима.
Добавьте следующую строку в свой ~/.bashrc:
alias sudo='sudo '
Из руководства bash:
Псевдонимы позволяют заменить строку на слово, когда оно используется как первое слово простой команды. Оболочка поддерживает список псевдонимов, которые могут быть установлены и не установлены с помощью команд alias и unalias builtin. Первое слово каждой простой команды, если не указано, проверяется на наличие псевдонима. Если это так, это слово заменяется текстом псевдонима. Символы '/', '$', '`', '=' и любые метасимволы оболочки или цитируемые выше символы могут не отображаться в псевдониме. Текст замены может содержать любой допустимый ввод оболочки, включая метасимволы оболочки. Первое слово заменяющего текста проверяется на псевдонимы, но слово, которое совпадает с расширяемым псевдонимом, не разворачивается во второй раз. Это означает, что можно, например, псевдоним ls -F, и Bash не пытается рекурсивно расширять заменяющий текст. Если последним символом значения псевдонима является пробел или символ табуляции, тогда следующее командное слово, следующее за псевдонимом, также проверяется на расширение псевдонима.(Акцент мой). Bash только проверяет первое слово команды для псевдонима, любые слова после этого не проверяются. Это означает, что в команде, подобной sudo ll, только первое слово (sudo) проверяется bash для псевдонима, ll игнорируется. Мы можем сказать bash, чтобы проверить следующее слово после псевдонима (i.e sudo), добавив пробел в конец значения псевдонима.
Добавьте следующую строку в свой ~/.bashrc:
alias sudo='sudo '
Из руководства bash:
Псевдонимы позволяют заменить строку на слово, когда оно используется как первое слово простой команды. Оболочка поддерживает список псевдонимов, которые могут быть установлены и не установлены с помощью команд alias и unalias builtin. Первое слово каждой простой команды, если не указано, проверяется на наличие псевдонима. Если это так, это слово заменяется текстом псевдонима. Символы '/', '$', '`', '=' и любые метасимволы оболочки или цитируемые выше символы могут не отображаться в псевдониме. Текст замены может содержать любой допустимый ввод оболочки, включая метасимволы оболочки. Первое слово заменяющего текста проверяется на псевдонимы, но слово, которое совпадает с расширяемым псевдонимом, не разворачивается во второй раз. Это означает, что можно, например, псевдоним ls -F, и Bash не пытается рекурсивно расширять заменяющий текст. Если последним символом значения псевдонима является пробел или символ табуляции, тогда следующее командное слово, следующее за псевдонимом, также проверяется на расширение псевдонима.(Акцент мой). Bash только проверяет первое слово команды для псевдонима, любые слова после этого не проверяются. Это означает, что в команде, подобной sudo ll, только первое слово (sudo) проверяется bash для псевдонима, ll игнорируется. Мы можем сказать bash, чтобы проверить следующее слово после псевдонима (i.e sudo), добавив пробел в конец значения псевдонима.
добавьте следующую строку в ваш ~/.bashrc:
alias sudo='sudo '
от руководство bash:
псевдонимы позволяют строка, которая будет заменена на слово, когда оно используется в качестве первого слова простой команды. Оболочка поддерживает список псевдонимов, которые могут быть включен и выключен с псевдонимом и встроенные команды unalias. Первое слово каждой простой команды, если без кавычек, проверяется, чтобы увидеть, если он имеет псевдоним. Если это так, то слово заменяется в тексте псевдоним. Персонажи‘/’, ‘$’, ‘’, ‘=’ и любой из метасимволов оболочки или цитирование символов, перечисленных выше, не может появиться в псевдоним. Текст замены может содержать любое допустимое входное оболочки, включая метасимволы Shell. Первое слово текста замены, который проверяется на псевдонимы, но слово, которое идентично псевдоним был расширен, не расширен второй раз. Это означает, что можно псевдоним LS выполнить "LS -Ф", например, и Баш не пытается рекурсивно разверните текст замены. Если последний символ значения псевдоним-это пробел или табуляция, то на следующее командное слово после псевдонима тоже проверено псевдоним расширения.(выделено мной). Баш проверяет только первое слово команды для псевдонима, ни слова после этого не проверил. Это означает, что в команду sudo ll, только первое слово (sudo) проверяется bash для псевдонима, ll игнорируется. Мы можем сказать баш на проверить следующее слово после псевдонима (я.е sudo) путем добавления пробела в конце значения псевдоним.
Добавьте следующую строку к вашему ~ / .bashrc
:
alias sudo = 'sudo'
Из bash manual :
Псевдонимы позволяют заменить строку на слово, когда оно используется как первое слово простой команды. Оболочка поддерживает список псевдонимов, которые могут быть установлены и не настроены с помощью встроенных команд псевдонима и unalias.
Первое слово каждой простой команды, если оно не указано, проверяется на наличие псевдонима. Если это так, это слово заменяется текстом псевдонима. Символы '/', '$', '`', '=' и любые метасимволы оболочки или цитируемые выше символы могут не отображаться в псевдониме. Текст замены может содержать любой допустимый ввод оболочки, включая метасимволы оболочки. Первое слово заменяющего текста проверяется на псевдонимы, но слово, которое совпадает с расширяемым псевдонимом, не разворачивается во второй раз. Это означает, что можно, например, псевдоним ls -F, и Bash не пытается рекурсивно расширять заменяющий текст. Если последним символом значения псевдонима является пробел или символ табуляции, тогда следующее командное слово, следующее за псевдонимом, также проверяется на расширение псевдонима.
blockquote>(Акцент мой). Bash только проверяет первое слово команды для псевдонима, любые слова после этого не проверяются. Это означает, что в команде, подобной
sudo ll
, только первое слово (sudo
) проверяется bash для псевдонима,ll
игнорируется. Мы можем сказать bash, чтобы проверить следующее слово после псевдонима (например,sudo
), добавив пробел в конец значения псевдонима.
Добавьте следующую строку к вашему ~ / .bashrc
:
alias sudo = 'sudo'
Из bash manual :
Псевдонимы позволяют заменить строку на слово, когда оно используется как первое слово простой команды. Оболочка поддерживает список псевдонимов, которые могут быть установлены и не настроены с помощью встроенных команд псевдонима и unalias.
Первое слово каждой простой команды, если оно не указано, проверяется на наличие псевдонима. Если это так, это слово заменяется текстом псевдонима. Символы '/', '$', '`', '=' и любые метасимволы оболочки или цитируемые выше символы могут не отображаться в псевдониме. Текст замены может содержать любой допустимый ввод оболочки, включая метасимволы оболочки. Первое слово заменяющего текста проверяется на псевдонимы, но слово, которое совпадает с расширяемым псевдонимом, не разворачивается во второй раз. Это означает, что можно, например, псевдоним ls -F, и Bash не пытается рекурсивно расширять заменяющий текст. Если последним символом значения псевдонима является пробел или символ табуляции, тогда следующее командное слово, следующее за псевдонимом, также проверяется на расширение псевдонима.
blockquote>(Акцент мой). Bash только проверяет первое слово команды для псевдонима, любые слова после этого не проверяются. Это означает, что в команде, подобной
sudo ll
, только первое слово (sudo
) проверяется bash для псевдонима,ll
игнорируется. Мы можем сказать bash, чтобы проверить следующее слово после псевдонима (например,sudo
), добавив пробел в конец значения псевдонима.
Добавьте следующую строку к вашему ~ / .bashrc
:
alias sudo = 'sudo'
Из bash manual :
Псевдонимы позволяют заменить строку на слово, когда оно используется как первое слово простой команды. Оболочка поддерживает список псевдонимов, которые могут быть установлены и не настроены с помощью встроенных команд псевдонима и unalias.
Первое слово каждой простой команды, если оно не указано, проверяется на наличие псевдонима. Если это так, это слово заменяется текстом псевдонима. Символы '/', '$', '`', '=' и любые метасимволы оболочки или цитируемые выше символы могут не отображаться в псевдониме. Текст замены может содержать любой допустимый ввод оболочки, включая метасимволы оболочки. Первое слово заменяющего текста проверяется на псевдонимы, но слово, которое совпадает с расширяемым псевдонимом, не разворачивается во второй раз. Это означает, что можно, например, псевдоним ls -F, и Bash не пытается рекурсивно расширять заменяющий текст. Если последним символом значения псевдонима является пробел или символ табуляции, тогда следующее командное слово, следующее за псевдонимом, также проверяется на расширение псевдонима.
blockquote>(Акцент мой). Bash только проверяет первое слово команды для псевдонима, любые слова после этого не проверяются. Это означает, что в команде, подобной
sudo ll
, только первое слово (sudo
) проверяется bash для псевдонима,ll
игнорируется. Мы можем сказать bash, чтобы проверить следующее слово после псевдонима (например,sudo
), добавив пробел в конец значения псевдонима.
sudo -H ll
?
– Mark E. Haase
9 April 2016 в 08:19
У меня есть другое решение, в котором вам не нужно добавлять 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
Затем войдите в новый терминал, и вам должно быть хорошо идти.
Ответ @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.
он проверяет, есть ли у меня псевдоним для данной команды и запускает псевдоним команды вместо литерала с [F4] и в этом случае.
вот моя функция как один-лайнер:
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 с их псевдонимы, когда нажав клавишу Tab.
Сохранить как /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. Откройте файл и добавьте следующие строки:
if [ "$BASH" ]; then
if [ -f ~/.bash_aliases];then
. ~/.bash_aliases
fi
fi
В основном, этот скрипт bash выполняет проверку файла с именем .bash_aliases. Если файлы присутствуют, он выполняет файл.
Сохраните файл .profile и создайте свои псевдонимы в .bash_aliases. Если вы уже подготовили файл псевдонимов, скопируйте файл в это место
Перезапустите терминал, и вы готовы к работе!
у меня есть еще одно хорошее решение, которое добавляет немного доверия тоже:
использовать автодополнение bash для автоматической замены слов sudo с их псевдонимы, когда нажав клавишу Tab.
Сохранить как /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, не забудьте указать его или перезапустить сеанс терминала после этого, чтобы применить изменения.
топ-проголосовали ответ будет один большой. Однако, если вы Тип [F2] и поднять на суда оперативную (#) Вы не будете иметь псевдонимы, которую вы хотите использовать.
, чтобы использовать свои псевдонимы (и все остальное) на клавиши [F4] подскажите, использование:
sudo cp "$PWD"/.bashrc /root/.bashrc
, где "$ФРД" автоматически раскладывается в положение "/Home/ВАШЕ_ИМЯ_ПОЛЬЗОВАТЕЛЯ"
У меня есть другое решение, в котором вам не нужно добавлять 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
Затем войдите в новый терминал, и вам должно быть хорошо идти.
Ответ @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 как псевдоним.