子プロセスから現在のディレクトリを変更する

子プロセスから現在のディレクトリを変更する

呼び出し元のシェルの現在のディレクトリを変更しながら、子プロセスでシェル スクリプトを実行するにはどうすればよいでしょうか。

答え1

あなたはできません。

親シェルの環境は、子プロセスが起動されたときに子プロセスにコピーされ、その時点から、子プロセスと子プロセスは完全に分離されます。子プロセスは親プロセスの環境を直接変更することはできません。

子が親に影響を与える唯一の方法は、親にメッセージを送り、親がそれに従って行動することです。

eval "$( bash -c 'echo "cd /"' )"  # message through command string to stdout

または

# message through USR1 signal triggers predefined action

trap 'cd /' USR1
bash -c 'kill -s USR1 "$PPID"'

関連情報