Неправильное использование скобок
Я застрял на этом в течение нескольких часов:
cd /dir1
(cd $HOME); pwd;
Почему pwd
еще скажи /dir1
и не пошел в мой домашний каталог?
1 ответ
Скобки запускают подоболочку: оболочка вызывает fork
и команды внутри скобок выполняются в подпроцессе. Родительский процесс ожидает завершения подпроцесса, а затем возобновляет выполнение. Итак, что происходит:
- Исполнение
cd /dir1
: Оболочка выполняетchdir("/dir1")
, - Выполнение скобок: оболочка вызывает
fork
затем родительский процесс ожидает выхода из дочернего процесса. - Исполнение
cd $HOME
: подоболочка выполняетchdir("/home/jurgen")
, - В subshell нет команд, поэтому он завершается.
- Раковина вышла, поэтому
wait
позвонить в родителя возвращается. - Исполнение
pwd
: оболочка печатает свой текущий каталог, который/dir1
,