次のようにプログラムを呼び出します:
(cd /c; /a/helloworld)
括弧により、サブシェルが生成されます。このサブシェルは、作業ディレクトリを /c
に変更します。 、次に helloworld
を実行します /a
から .プログラムが終了すると、サブシェルが終了し、開始したディレクトリにある親シェルのプロンプトに戻ります。
エラー処理: ディレクトリを変更せずにプログラムを実行しないようにします。 /c
のスペルを間違えたとき 、 helloworld
を実行します 条件付き:
(cd /c && /a/helloworld)
メモリ使用量の削減: hello world の実行中にサブシェルがメモリを浪費しないようにするには、helloworld
を呼び出します。 実行経由:
(cd /c && exec /a/helloworld)
[この回答を改善するためのヒントを提供してくれた Josh と Juliano に感謝します!]
David Schmitt の回答と Josh の提案に似ていますが、シェル プロセスを実行したままにしません。
(cd /c && exec /a/helloworld)
この方法は、通常シェルでコマンドを実行する方法に似ています。実際の違いを確認するには、ps ef
を実行する必要があります。 各ソリューションで別のシェルから。
サブシェルを必要とせず、bash に組み込まれているオプション
(pushd SOME_PATH && run_stuff; popd)
デモ:
$ pwd
/home/abhijit
$ pushd /tmp # directory changed
$ pwd
/tmp
$ popd
$ pwd
/home/abhijit