Appelez le programme comme ceci :
(cd /c; /a/helloworld)
Les parenthèses provoquent l'apparition d'un sous-shell. Ce sous-shell change alors son répertoire de travail en /c
, puis exécute helloworld
à partir de /a
. Une fois le programme terminé, le sous-shell se termine, vous ramenant à l'invite du shell parent, dans le répertoire à partir duquel vous êtes parti.
Gestion des erreurs : Pour éviter d'exécuter le programme sans avoir changé de répertoire, par ex. en ayant mal orthographié /c
, faire l'exécution de helloworld
conditionnel :
(cd /c && /a/helloworld)
Réduire l'utilisation de la mémoire : Pour éviter que le sous-shell gaspille de la mémoire pendant l'exécution de hello world, appelez helloworld
via exec :
(cd /c && exec /a/helloworld)
[Merci à Josh et Juliano d'avoir donné des conseils pour améliorer cette réponse !]
Semblable à la réponse de David Schmitt, plus la suggestion de Josh, mais ne laisse pas un processus shell en cours d'exécution :
(cd /c && exec /a/helloworld)
Cette méthode ressemble davantage à la façon dont vous exécutez habituellement des commandes sur le shell. Pour voir la différence pratique, vous devez exécuter ps ef
d'un autre shell avec chaque solution.
Une option qui ne nécessite pas de sous-shell et est intégrée à bash
(pushd SOME_PATH && run_stuff; popd)
Démo :
$ pwd
/home/abhijit
$ pushd /tmp # directory changed
$ pwd
/tmp
$ popd
$ pwd
/home/abhijit