Почему команда env не применяется вместе с командой cd в Linux?

Почему команда `env -v HOME=/tmp cd` не работает и как правильно использовать переменные окружения в Linux? 

Также, почему команда `env -v HOME=/tmp echo $HOME` не выводит ожидаемое значение переменной окружения `$HOME`?
  • 13 октября 2023 г. 15:47
Ответы на вопрос 2
Команда `env` в Linux используется для установки переменных окружения для выполнения других команд. Однако, команда `cd` является встроенной командой в оболочке (shell), а не внешней программой собственно Linux, поэтому команда `env` не может изменить текущий рабочий каталог с помощью команды `cd`.

Команда `env -v HOME=/tmp cd` не работает, потому что после выполнения команды `env`, оболочка запускает новую команду `cd` в отдельном процессе. После выполнения команды `cd`, процесс завершается и текущий рабочий каталог в основной оболочке не меняется.

Чтобы правильно использовать переменные окружения в Linux, нужно установить переменные окружения перед выполнением команды. Например, вместо `env -v HOME=/tmp cd` можно использовать `HOME=/tmp cd`.

Относительно команды `env -v HOME=/tmp echo $HOME`, команда `echo $HOME` выполняется в отдельном процессе, который не запускается в контексте установленной переменной окружения `HOME`.
env -v HOME=/tmp echo $HOME
Здесь вы запускаете команду env с параметрами -v, HOME=/tmp и echo. При запуске env переменная $HOME подставляется, то есть она будет равна /tmp. Результатом выполнения будет вывод строки /tmp.

env -v HOME=/tmp cd
Эта команда вызывает ошибку, так как cd является встроенной командой оболочки и не может быть выполнена как отдельный исполняемый файл. Вы можете исправить это, используя следующую команду: env -v HOME=/tmp $SHELL -c 'cd'
Таким образом, вы запустите новый экземпляр оболочки с переменной HOME, установленной на /tmp, и выполните команду cd.
Похожие вопросы