Usar la sustitución de comandos para ejecutar múltiples comandos

Usar la sustitución de comandos para ejecutar múltiples comandos

Lo que estoy tratando de hacer en bash es escribir un script fooque, 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 evalla 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 cdcon 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.

información relacionada