Estoy intentando escribir un script bash que abra una nueva ventana de terminal de gnome y ejecute un comando con alias. He visto que en lugar de usar alias, usar una función es el camino correcto a seguir. He probado ambos enfoques, pero no puedo hacerlo funcionar porque aparece un error que indica que no se reconoce el comando.
Esto es lo que tengo.
#!/bin/bash
# Cluster related functions
function gateway () {
ssh user@something -t ssh gateway
}
gnome-terminal --window-with-profile=Bash -- bash -c "gateway; bash;"
El error que recibo es:
bash: gateway: command not found
Respuesta1
La solución más sencilla es exportar la función antes de llamar gnome-terminal
:
export -f gateway
Notas:
No puede exportar alias.
Exportar funciones no es una característica portátil. Funcionará de
bash
abash
.Naturalmente, funcionará si lo nuevo
bash
es descendiente de lo antiguobash
(donde se exportó la función). Por ejemplo, signome-terminal
hereda del antiguobash
y el nuevobash
hereda delgnome-terminal
. Esto sucede cuando el viejobash
se ejecuta en un terminal que no lo esgnome-terminal
.Mis pruebas indican que si
gnome-terminal
se ejecuta desde dentrognome-terminal
(por lo que el entorno contieneGNOME_TERMINAL_*
variables), entonces el nuevognome-terminal
proceso delegará la tarea al que ya se está ejecutandognome-terminal
y saldrá. La herencia natural del entorno al nuevobash
no puede ocurrir, aun así el nuevognome-terminal
proceso es lo suficientemente inteligente como para comunicar no sólo la orden sino también el entorno. De esta manera lo nuevobash
dentro de lo viejognome-terminal
se comporta como un descendiente de lo viejobash
, la función exportada funciona. Probado congnome-terminal
3.28.2.