Я знаю, что когда процесс запускается, он наследует рабочий каталог своего родительского процесса. Но наследует ли он и логический, и физический рабочий каталог или только физический рабочий каталог?
решение1
Хм, что-то вроде того. «Логический» рабочий каталог переносится в переменную окружения PWD
.environ(7)
говорит, что это "Устанавливается некоторыми оболочками", поэтому очевидно зависит от приложения. Другая проблема заключается в том, что другая программа читает это:
/tmp$ ln -s ~ link
/tmp$ cd link
/tmp/link$ bash -c "pwd"
/tmp/link
/tmp/link$ zsh -c "pwd"
/home/itvirta
/tmp/link$ dash -c "pwd"
/tmp/link
Bash, dash
похоже, рассчитывает на это, но zsh
не делает этого (в моей системе, я уверен, это настраивается).
решение2
Theполучитьcwdсистемный вызов возвращает физические пути, какPOSIXпредписывает, что
Имя пути не должно содержать компонентов, представляющих собой точку или пару «точка-точка», а также символические ссылки.
Linux, по-видимому, использует для передачи CWD более низкоуровневый механизм, чем имена, поскольку вы можете переименовать каталог, пока другая программа использует его в качестве своего CWD.