Zavolejte program takto:
(cd /c; /a/helloworld)
Závorky způsobí, že se vytvoří podskořápka. Tento sub-shell pak změní svůj pracovní adresář na /c
, pak provede helloworld
od /a
. Po ukončení programu se sub-shell ukončí a vrátí vás do vaší výzvy nadřazeného shellu v adresáři, ze kterého jste začali.
Zpracování chyb: Chcete-li se vyhnout spuštění programu bez změny adresáře, např. při chybně napsaném /c
, proveďte provedení helloworld
podmíněné:
(cd /c && /a/helloworld)
Snížení využití paměti: Abyste zabránili plýtvání pamětí při provádění hello world, zavolejte helloworld
přes exec:
(cd /c && exec /a/helloworld)
[Díky Joshovi a Julianovi za poskytnutí tipů na zlepšení této odpovědi!]
Podobné jako odpověď Davida Schmitta plus Joshův návrh, ale nenechává spuštěný proces shellu:
(cd /c && exec /a/helloworld)
Tento způsob je více podobný tomu, jak obvykle spouštíte příkazy v shellu. Abyste viděli praktický rozdíl, musíte spustit ps ef
z jiného shellu s každým řešením.
Možnost, která nevyžaduje subshell a je zabudována do bash
(pushd SOME_PATH && run_stuff; popd)
Demo:
$ pwd
/home/abhijit
$ pushd /tmp # directory changed
$ pwd
/tmp
$ popd
$ pwd
/home/abhijit