Chiama il programma in questo modo:
(cd /c; /a/helloworld)
Le parentesi generano una sub-shell. Questa sub-shell cambia quindi la sua directory di lavoro in /c
, quindi esegue helloworld
da /a
. Dopo che il programma è terminato, la sub-shell termina, riportandoti al prompt della shell madre, nella directory da cui sei partito.
Gestione degli errori: Per evitare di eseguire il programma senza aver cambiato la directory, ad es. in caso di errore di ortografia /c
, eseguire l'esecuzione di helloworld
condizionale:
(cd /c && /a/helloworld)
Riduzione dell'utilizzo della memoria: Per evitare che la subshell sprechi memoria durante l'esecuzione di hello world, chiama helloworld
tramite exec:
(cd /c && exec /a/helloworld)
[Grazie a Josh e Juliano per aver dato consigli su come migliorare questa risposta!]
Simile alla risposta di David Schmitt, oltre al suggerimento di Josh, ma non lascia in esecuzione un processo di shell:
(cd /c && exec /a/helloworld)
In questo modo è più simile a come di solito esegui i comandi sulla shell. Per vedere la differenza pratica, devi eseguire ps ef
da un'altra shell con ogni soluzione.
Un'opzione che non richiede una subshell ed è incorporata in bash
(pushd SOME_PATH && run_stuff; popd)
Demo:
$ pwd
/home/abhijit
$ pushd /tmp # directory changed
$ pwd
/tmp
$ popd
$ pwd
/home/abhijit