Неправильное использование скобок

Я застрял на этом в течение нескольких часов:

cd /dir1
(cd $HOME); pwd;

Почему pwd еще скажи /dir1 и не пошел в мой домашний каталог?

1 ответ

Скобки запускают подоболочку: оболочка вызывает forkи команды внутри скобок выполняются в подпроцессе. Родительский процесс ожидает завершения подпроцесса, а затем возобновляет выполнение. Итак, что происходит:

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