2012-03-30 18 views
7

Como un ejemplo trivial, en el usuario foo ~/.bashrc hay un alias;Agregué alias al usuario ~/.bashrc pero "sudo -u usuario -i 'alias_name'" todavía informa "comando no encontrado"?

alias ll='ls -l' 

Usando sudo puedo ver que el alias está configurado;

[email protected]:~$ sudo -u foo -i alias ll 
alias ll=`ls -l' 

Pero, en realidad no puedo usar el alias;

[email protected]:~$ sudo -u foo -i ll 
-bash: ll: command not found 

Los comandos que son funciones bash funcionan, OK. ¿Hay alguna manera de hacer que los alias funcionen también?

Respuesta

3

Hay un gran ejemplo de cómo hacer esto in the Archlinux wiki. Añadir el follwoing a tu .bashrc

alias sudo="sudo " 

No me preguntes por qué funciona. Revisé mis páginas de hombres buscando esto sin suerte, pero nunca me ha fallado todavía.

> sudo ll 
total 60 
drwxr-xr-x 2 brice users 4096 Feb 4 16:17 classes 
drwxr-xr-x 3 brice users 4096 Mar 6 21:48 Desktop 
drwx------ 6 brice users 4096 Mar 28 21:32 Downloads 
drwx------ 25 brice users 4096 Mar 29 21:20 Dropbox 
drwxr-xr-x 2 brice users 4096 Mar 11 20:27 scripts 
drwxr-xr-x 2 brice users 4096 Mar 19 21:59 tmp 
+0

Eso es deliciosamente loco! – Sorpigal

10
+0

+1 para proporcionar un enlace que explique * por qué * esto funciona. – Sorpigal

+0

Esto funciona para 'foo' conectado localmente, pero no funciona para la 'barra' de usuario que intenta 'su -u foo'. – CAB

+1

@CAB: el artículo relacionado con Gor explica por qué. El truco del espacio final solo ayuda si el argumento que sigue inmediatamente al primer comando con alias también es un alias. Si dices 'sudo -i ll', Bash ve que' -i' no es un alias, por lo que deja de expandir los alias y ejecuta el comando generado. Probablemente tengas que convertir tu segundo alias en un script o función de shell para obtener el comportamiento que deseas. –

1

Asegúrese de agregar

alias sudo='sudo ' 

luego seguir adelante y añadir su alias de costumbre ... por ejemplo. si el comando regular es

sudo rm ~/qwerty/removethis.txt 

alias de comando anterior se verá como

alias your_custom_alias='sudo rm ~/qwerty/removethis.txt' 
Cuestiones relacionadas