Lo que estoy tratando de hacer en bash es escribir un script foo
que, cuando lo ejecuto $(foo)
, cambia el directorio y ejecuta un script usando source
. Los contenidos de foo
:
echo cd bar
echo "&&"
echo source baz
Cuando ejecuto $(foo)
, cambia el directorio a "barra", pero no se ejecuta source baz
. ¿Hay alguna forma de lograr esto?
Respuesta1
Necesitas eval
la salida:
eval $(foo)
De lo contrario, &&
(o cualquier otro elemento de lenguaje similar) se trata como si estuviera entre comillas: un argumento normal para cd
.
$ echo $(foo)
cd bar && source baz
Saltándose el encabezado echo
, esto se ejecutaría cd
con los cuatro argumentos bar && source baz
, eliminando silenciosamente todos menos el primero.
Respuesta2
Puedes usaralias(ver también:hombre golpe) para hacer lo que intentas hacer.
alias foo='cd bar && source baz'
cambiará el directorio a bar y source baz cuando ejecute foo.