Estuve jugando con alias hoy y noté que los alias no parecen estar disponibles mientras uso 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
¿Hay alguna razón por la que no puedas usar alias mientras lo usas sudo
?
/root/.bashrc
no se lee cuando se ejecuta un comando a través de sudo.sudo -i
?Respuestas:
Agregue la siguiente línea a su
~/.bashrc
:Del manual de bash :
(El énfasis es mío).
Bash solo verifica la primera palabra de un comando para un alias, cualquier palabra después de eso no se verifica. Eso significa que en un comando como
sudo ll
, solo la primera palabra (sudo
) es verificada por bash para un alias,ll
se ignora. Podemos decirle a bash que verifique la siguiente palabra después del alias (es decirsudo
) agregando un espacio al final del valor de alias.fuente
sudo -H ll
?Escribí una función Bash para que sombree
sudo
.Comprueba si tengo un alias para el comando dado y ejecuta el comando con alias en lugar del literal con
sudo
en ese caso.Aquí está mi función como one-liner:
O bien formateado:
Sin embargo, puede agregarlo a su
.bashrc
archivo, no olvide obtenerlo o reiniciar su sesión de terminal para aplicar los cambios.fuente
Los alias son específicos del usuario; debe definirlos en
/root/.bashrc
fuente
sudo -s
osudo -i
(y solamente si se ejecuta por sí mismo para conseguir un intérprete de comandos, no con lossudo -s command...
osudo -i command...
las formas) osudo bash
, osudo su
, o la situación en la que He habilitado los inicios de sesión raíz y tiene un shell raíz de esa manera. Cuando un usuario no root se ejecutasudo command...
desde su propio shell, la expansión de alias se realiza mediante su propio shell no root.sudo
no expande los alias, por lo que, aplicada a la situación descrita en la pregunta , esta respuesta es incorrecta.La respuesta de @Alvins es la más corta. ¡Sin duda! :-)
Sin embargo, pensé en una solución de línea de comando para ejecutar un comando con alias en sudo donde no hay necesidad de redefinir
sudo
con unalias
comando.Aquí está mi propuesta para aquellos a quienes les puede interesar:
Solución
Ejemplo
En el caso del
ll
comandoExplicación
cuando tiene un alias (como :)
ll
el comandotype -a
devuelve la expresión con alias:con
grep
usted seleccione el texto entre el acento 'y el apóstrofe' en ese casols -l
Y
xargs
ejecuta el texto seleccionadols -l
como parámetro desudo
.Sí, un poco más pero completamente limpio ;-) No es necesario redefinir
sudo
como alias.fuente
alias
incorporado, ya que su salida es más limpia.alias ll
salidasalias ll='ls -ahlF'
.alias ll | sed "s/.*'\(.*\)'.*/\1/g" | xargs sudo
.sudo -i
primero, ejecutar el comando con alias, sino hacerlo de inmediato. Tener un comando tan complejo derrota eso. Podrías hacer lo primero y ser mucho más rápido.Tengo otra buena solución, que también agrega un poco de confianza:
Use bash complete para reemplazar automáticamente las palabras detrás
sudo
con sus alias al presionar tab.Guarde esto como
/etc/bash_completion.d/sudo-alias.bashcomp
, y debería cargarse automáticamente al iniciar el shell interactivo:Luego inicie sesión en una nueva terminal, y debería estar listo para comenzar.
fuente
compgen -a
sudo ll
), presiona [TAB ↹], y el script encuentrall
en la lista de asignaciones de alias, corta lo que se le asigna y lo inserta. (Entonces obtendrías, psudo ls -lahvF --color=auto --time-style=long-iso
. Ej .)Tengo una solución diferente por la cual no es necesario agregar
sudo
como un alias. Ejecuto Linux Mint 17.3 pero debería ser bastante similar a Ubuntu.Cuando eres root, entonces
.profile
se ejecuta desde su directorio de inicio. Si no sabe cuál es el directorio de inicio en la raíz, puede verificar con:Como puede ver, el hogar de
root
es/root/
. Verifique su contenido:Debería haber un
.profile
archivo. Abra el archivo y agregue las siguientes líneas:Básicamente, lo que hace este script bash es buscar un archivo llamado
.bash_aliases
. Si los archivos están presentes, ejecuta el archivo.Guarde el
.profile
archivo y cree sus alias.bash_aliases
. Si ya tiene el archivo de alias listo, copie el archivo en esta ubicación¡Vuelva a iniciar el terminal y listo!
fuente
La respuesta más votada es excelente. Sin embargo, si escribe
sudo -i
y se eleva a un indicador de sudo (#
), no tendrá los alias que desea usar.Para utilizar sus alias (y todo lo demás) en el
#
indicador, use:Donde "$ PWD" se expande automáticamente en "/ home / YOUR_USER_NAME"
fuente
@ WinEunuuchs2Unix: se
$PWD
expande al "directorio de trabajo actual". Creo que quieres$HOME
.Además, para la mayoría de las situaciones, probablemente sea mejor tener un archivo .bashrc raíz separado. De hecho, lo convertiría en un archivo real
/root
, un enlace suave a él en el directorio de inicio del usuario (por ejemplo,.bashrc_root
), y lo buscaría en el.bashrc
archivo del usuario . Si en algún momento posterior esta cuenta de usuario privilegiada ya no está presente, el.bashrc
archivo raíz todavía está disponible para otros usuarios.fuente