Tengo alias en un archivo ~/.bash_aliases
en un servidor ubuntu remoto. El archivo se carga en la forma estándar de un archivo ~/.bashrc
, así:Invocar alias de bash en scripts Fabric
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
Eso ~/.bashrc
archivo a su vez se carga (también en una forma estándar) desde un archivo ~/.profile
que se parece a esto:
if [ "$BASH" ]; then
if [ -f ~/.bashrc ]; then
source ~/.bashrc
echo ".profile loaded .bashrc"
fi
fi
mesg n
He encontrado que mis alias no estaban disponibles en mis comandos de fábrica, por ej. cuando hago esto en un script tela:
run("aliased_command")
consigo esta salida:
run: aliased_command
out: .profile loaded .bashrc
out: /bin/bash: aliased_command: command not found
Fatal error: run() encountered an error (return code 127) while executing 'aliased_command'
Ahora me las arreglé para reproducir este exterior de la tela por la tala en el servidor con ssh, y en ejecución:
~# /bin/bash -l -c aliased_command
de la cáscara (nb /bin/bash -l -c
es por defecto de tejido, ver here) consigo la misma salida:
.profile loaded .bashrc:
/bin/bash: aliased_command: command not found
Después de un poco de búsqueda en los temas relacionados, leí en alguna parte que no se exportan los alias de conchas no interactivas, y luego me las arreglé para solucionar este problema utilizando /bin/bash -l -c -i
(-i
conjuntos de fiesta a modo interactivo).
Luego añade lo siguiente a mi fabfile.py:
env.shell = "/bin/bash -l -c -i"
Ahora puedo utilizar alias en mis comandos de tela ... simplemente genial!
Así que mis preguntas son:
¿Hay algún problema con esta solución? Si es así, ¿qué debería estar haciendo?
¿Alguien más tiene un problema al ejecutar alias en sus archivos fabfiles?
¿Hay alguna razón obvia por la que podría tener este problema y otros no?
¿Alguien me puede indicar enlaces, etc. que describen este problema y una resolución? Y también explican cómo los encontraron ...:)
Creo que la mejor solución para el problema que la mayoría de las personas que vienen aquí va a intentar resolver (suponiendo que no haya un problema importante al usar -i). Sin embargo, las otras respuestas fueron bastante útiles para mí para las preguntas específicas formuladas, por lo que le agradezco amablemente y he actualizado sus respuestas según corresponda. – JobJob