Llame al programa así:
(cd /c; /a/helloworld)
Los paréntesis hacen que se genere una subcapa. Esta subcapa luego cambia su directorio de trabajo a /c
, luego ejecuta helloworld
de /a
. Después de que el programa sale, el sub-shell finaliza, devolviéndole al indicador del shell principal, en el directorio desde el que empezó.
Gestión de errores: Para evitar ejecutar el programa sin haber cambiado el directorio, p. al haber escrito mal /c
, realiza la ejecución de helloworld
condicional:
(cd /c && /a/helloworld)
Reducir el uso de memoria: Para evitar que la subcapa desperdicie memoria mientras se ejecuta hello world, llame a helloworld
vía ejecutivo:
(cd /c && exec /a/helloworld)
[¡Gracias a Josh y Juliano por darnos consejos para mejorar esta respuesta!]
Similar a la respuesta de David Schmitt, más la sugerencia de Josh, pero no deja un proceso de shell ejecutándose:
(cd /c && exec /a/helloworld)
De esta manera es más similar a cómo normalmente ejecuta comandos en el shell. Para ver la diferencia práctica, debe ejecutar ps ef
de otro caparazón con cada solución.
Una opción que no requiere una subcapa y está integrada para bash
(pushd SOME_PATH && run_stuff; popd)
Demostración:
$ pwd
/home/abhijit
$ pushd /tmp # directory changed
$ pwd
/tmp
$ popd
$ pwd
/home/abhijit