Возьмите cd
в качестве примера. Кроме того, именно cd
напоминает мне об этом вопросе. Когда мы вводим "cd" и нажимаем enter на терминале, дочерний процесс cd
терминала запускается, и, на мой взгляд, все, что касается cd
, выполняется в дочернем процессе cd
. К моему удивлению, как cd
может изменить переменную окружения своего родительского процесса?
2
1 ответ
4
cd
не вносит никаких изменений в свой родительский процесс, потому что cd
не является процессом.
Это встроенная оболочка - конструкция, которая наиболее (каждый?) оболочка должна изменить свой контекст каталога.
cd
на bash изменит ваш cwd на bash. cd
на Zsh будет делать то же самое на Zsh. Это bash/zsh, которые делают это. И они меняют свой собственный контекст.
При этом я не думаю, что дочерний процесс может изменить среду своего родителя. Это должно быть теоретически возможно при непосредственном доступе к памяти, но я предполагаю, что мы говорим о реальных сценариях :-)