изменение текущего каталога из дочернего процесса

изменение текущего каталога из дочернего процесса

Как бы вы организовали выполнение скрипта оболочки в дочернем процессе, сохранив при этом возможность изменить текущий каталог вызывающей оболочки?

решение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"'

Связанный контент