mantener alias cuando uso sudo bash

9

Tengo un servidor Centos 5.5 que tiene mis propios comandos de alias para mi cuenta. Cuando lo hago sudo bash, todavía puedo usar esos alias, no tuve que agregar los alias a la raíz .bashrc.

Tengo otro servidor que es Centos 6.5. Pero cuando ejecuto sudo bash, no usará mis alias del usuario en el que estoy conectado. ¿Alguien sabe dónde lo configuro para incluir los alias del usuario en el que estoy conectado cuando lo uso sudo bash?

Tyler Knotek
fuente
Creo que los alias se heredan a través del entorno, por lo que tal vez la respuesta aquí funcione: unix.stackexchange.com/questions/92998/…
Barmar
El 5.5 probablemente conservó $ HOME de la persona que llama, mientras que 6.5 no. Ver sudo sudo -Vsalida y env_keepen la página de manual de sudoers.
Stéphane Chazelas
1
Gracias Barmar y Stephane. Tanto su respuesta me señaló en la dirección correcta. Tuve que configurar lo siguiente en sudoers: Defaults !always_set_homey Defaults !env_reset`
Tyler Knotek

Respuestas:

6

Agregue la siguiente línea a su ~ / .bashrc:

alias sudo='sudo '

Del manual de bash

Los alias permiten que una cadena se sustituya por una palabra cuando se usa como la primera palabra de un comando simple. El shell mantiene una lista de alias que pueden establecerse y no con los comandos incorporados alias y unalias.

La primera palabra de cada comando simple, si no se cita, se verifica para ver si tiene un alias. Si es así, esa palabra se reemplaza por el texto del alias. Los caracteres '/', '$', '' ',' = 'y cualquiera de los metacaracteres de shell o caracteres de comillas enumerados anteriormente pueden no aparecer en un nombre de alias. El texto de reemplazo puede contener cualquier entrada de shell válida, incluidos metacaracteres de shell. La primera palabra del texto de reemplazo se prueba en busca de alias, pero una palabra que es idéntica a un alias que se expande no se expande por segunda vez. Esto significa que uno puede alias ls a "ls -F", por ejemplo, y Bash no intenta expandir recursivamente el texto de reemplazo. Si el último carácter del valor de alias es un espacio o un carácter de tabulación, entonces la siguiente palabra de comando que sigue al alias también se verifica para la expansión de alias.

Entonces 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, bash solo comprueba la primera palabra (sudo) en busca de un alias, ll se ignora. Podemos decirle a bash que verifique la siguiente palabra después del alias (es decir, sudo) agregando un espacio al final del valor de alias.

Antonizick
fuente
Funciona para zsh también bien. ¡Gracias!
dzhi
Esto solo permite usar alias en el sudocomando, por ejemplo sudo some_alias ..., pero lo que OP pregunta es cómo hacer que los alias definidos para su propio usuario funcionen después de que él cambie a otro usuario usando sudo. Digamos que he some_aliasdefinido. Cuando sudoa rootusar sudo su, se crea un nuevo entorno y que alias no está definido allí. Existe el -Eparámetro del sudocomando que debería exportar el entorno, pero parece que los alias no son parte de él.
David Ferenczy Rogožan
0

Uso sudo -E, que exportará su entorno.

kaboom
fuente
3
no incluye alias (probado en Ubuntu 16.04.1)
Antonios Hadjigeorgalis
Está funcionando pero solo como sudo -E bash. Cuando se usa con suas sudo -E su, las cosas definidas en el usuario .bashrc(alias, solicitud, etc.) no se conservan, aunque parece que las variables de entorno se conservan en ambos casos. No estoy seguro de cómo funciona exactamente esto.
David Ferenczy Rogožan