Tengo un alias que pasa algunos parámetros a una herramienta que uso con frecuencia. A veces corro como yo mismo, a veces bajo sudo. Desafortunadamente, por supuesto, sudo no reconoce el alias.
¿Alguien tiene una pista sobre cómo pasar el alias?
En este caso, tengo un montón de opciones para Perl cuando estoy depurando:
alias pd='perl -Ilib -I/home/myuser/lib -d'
A veces, tengo que depurar mis herramientas como root, así que, en lugar de ejecutar:
pd ./mytool --some params
Necesito ejecutarlo bajo sudo. Lo he intentado de muchas maneras:
sudo eval $(alias pd)\; pd ./mytool --some params
sudo $(alias pd)\; pd ./mytool --some params
sudo bash -c "$(alias pd)\; pd ./mytool --some params"
sudo bash -c "$(alias pd); pd ./mytool --some params"
sudo bash -c eval\ "$(alias pd)\; pd ./mytool --some params"
sudo bash -c eval\ "'$(alias pd)\; pd ./mytool --some params'"
Esperaba una forma agradable y concisa de asegurarme de que mi alias pd actual se usara completamente (en caso de que necesite modificarlo más tarde), aunque algunos de mis intentos no fueron concisos en absoluto. Mi último recurso es ponerlo en un script de shell y ponerlo en algún lugar que sudo pueda encontrar. Pero los alias son muy útiles a veces, por lo que es un último recurso.
A trailing space in value causes the next word to be checked for alias substitution when the alias is expanded.
sudo
vez, mientras que querer mantener esesudo
truco -passthrough al mismo tiempo. Incluso esto se puede hacer: para usar las opciones nuevamente, use\sudo
. La barra invertida anulará el alias. (Muchos no parecen saber sobre eso). De esta manera, se puede ( peligro! ) Incluso eliminar archivos sin ninguna advertencia, anulando laalias rm='rm -i'
frecuencia especificada en.bash-aliases
, simplemente escribiendo\rm file-to-delete
.No tengo muy claro qué estás tratando de hacer. Puedo ver dos formas:
La manera correcta
alias pd='sudo perl -Ilib -I/home/myuser/lib -d'
Luego, la ejecución
pd ./mytool
ejecutará su comando de depuración como root pero aún conservará los beneficios de sudo (pista de auditoría, no operando desde un shell raíz).Ejemplo:
La manera fácil
Agregue los alias a la raíz
.bashrc
y úselossudo -i
siempre que sudo a la raíz.fuente
Solo tiene dos alias y usa una variable
No veo la razón para usar
awk
o, acut
menos que sea solo para tener el alias central definido una vez para que sea más fácil modificarlo. Si ese es el caso, entonces esto funciona:Aquí hay una función simplista para hacer pares de alias como el de arriba:
Usar:
Ahora tienes
pd
yspd
másct
ysct
.fuente
Desearía poder marcar dos respuestas como "correctas". Combinando la forma correcta de la publicación de Insyte , um, perspicaz, con la solución awk (o corte) de Bill Weiss , se me ocurrió esto:
Ahora iré y pondré esto en una función de shell en mi .bashrc o algo así, y luego crearé versiones "s" de todos mis alias que deseo ejecutar como root.
Actualización : ligera modificación de la función simplista de Dennis Williamson para que sea un poco más fácil de usar:
Esto significa que solo tengo que poner "s" delante de todo el comando. En lugar de:
Solo agrego la s en el frente.
Y ya terminé. Claro, la computadora hace un poco más de trabajo, pero para eso es una computadora. :-)
¡Gracias!
fuente
alias sudo="sudo "
funciona perfectode http://www.shellperson.net/using-sudo-with-an-alias/
fuente
¿No sería más fácil simplemente hackear un script que incluye sus opciones, y luego colocarlo en algún lugar de una de las carpetas que es la ruta para la cuenta regular y la raíz? Realmente no tomaría mucho guión.
fuente
Esto es difícil, pero funciona aquí:
fuente
Agregue un prefijo "sudo" a los alias y comandos seleccionados desde dentro de su me
~/.bashrc
gusta así:fuente
alias sudo="sudo "
es más fácil.Como publicado algunas veces, hazlo en '.bashrc':
alias sudo = 'sudo'
La razón por la cual se explica en 'man bash' y 'help alias':
alias: alias [-p] [nombre [= valor] ...] Defina o muestre alias.
fuente
Quieres algo como esto:
fuente
bash -i
(i = interactivo) es solo v4.0. Entonces, en un servidor más antiguo que todavía tienebash
v3 ejecutándose, lo más probable es que falle. Pero prueba que estoy equivocado, cualquiera, adelante;)-i
es Bourne shell, ver: pubs.opengroup.org/onlinepubs/009695399/utilities/sh.html#!/bin/bash -i
después del shebang, que aparentemente no es lo mismo (?). Para cortar una larga historia corta, utilizandohistory
en unabash
secuencia de comandos (y no en la línea de comandos "en vivo") va a requerir la-i
opción, que he podido conseguir trabajo en un servidor con "sólo"bash
v3 instalado. Y eso es un hecho.No sé si es lo más sabio hacer en una caja de producción, pero localmente uso
fuente
¿Puede agregar el alias al .bashrc de la raíz o simplemente ejecutar .bashrc a través de sudo antes de su comando?
fuente