Реальность находится где-то между двумя описанными вами возможностями. Bash не добавляет myvar
к своей собственной среде, по крайней мере, не к полной среде оболочки, как мы обычно о ней думаем; он добавляет myvar
к своей временной среде. Затем он создает среду экспорта, специально для новой команды, из временной среды вместе с текущим контекстом переменных и функциями оболочки, перед разветвлением, если это необходимо для запуска дочерней команды. Вы можете видеть это как вызовы maybe_make_export_env
в исходном коде Bash . Затем временная среда очищается после запуска дочернего элемента; ищите dispose_used_env_vars
.
На практике это не имеет никакого значения. Дочерняя команда получает среду, которую она должна получить, и родительская среда должна быть такой же, как только вы вернете себе управление; если вы не собираетесь вносить изменения в Bash, это все, что имеет значение.
Вы можете взглянуть на OverlayFS или в некоторых дистрибутивах все еще доступные aufs .
Вот описание OverlayFS в документации ядра Linux:
Overlay Filesystem
This document describes a prototype for a new approach to providing overlay-filesystem functionality in Linux (sometimes referred to as union-filesystems). An overlay-filesystem tries to present a filesystem which is the result over overlaying one filesystem on top of the other.
Вот рабочий пример с OverlayFS. Для этого требуются два дополнительных каталога: один для хранения постоянных изменений :все данные будут записываться туда, поэтому место на диске будет потребляться там, и пустой рабочий каталог в той же файловой системе.
Допустим, у вас есть каталоги, которые могут находиться в трех разных файловых системах, смонтированных как /fs1
, /fs2
и /fs3
(, и все они, конечно, могут быть в одной и той же файловой системе):
/fs1/base
/fs2/delta
/fs2/work
/fs3/fork
Как описано в предыдущей ссылке, вы монтируете окончательный объединенный вид(/fs3/fork
)с помощью:
mount -t overlay overlay -olowerdir=/fs1/base,upperdir=/fs2/delta,workdir=/fs2/work /fs3/fork
Вот и все. Вам придется прочитать документацию, чтобы узнать об ограничениях (, например :, когда используется NFS и т. д.)