Как настроить оповещение наблюдателя с помощью комбинации поиска текста и регулярных выражений

Было сказано, что нет необходимости экспортировать в bash, когда нерестуют подоболочки, в то время как другие говорят прямо противоположное. Важно отметить разницу между подоболочками (те, которые созданы (), ``, $() или циклы) и подпроцессы (процессы, вызываемые по имени, например, литерал bash, отображаемый в вашем скрипте ). Подседки будут иметь доступ ко всем переменным от родителя, независимо от их экспортируемого состояния. С другой стороны, подпроцессы будут видеть только экспортированные переменные. Что общего в этих двух конструктах, так это то, что ни одна из них не может передавать переменные обратно в родительскую оболочку.

$ noexport=noexport; export export=export; (echo subshell: $noexport $export; subshell=subshell); bash -c 'echo subprocess: $noexport $export; subprocess=subprocess'; echo parent: $subshell $subprocess
subshell: noexport export
subprocess: export
parent:

Есть еще один источник путаницы: некоторые считают, что подпроцессы «раздвоенные» - это те, t неэкспортируемые переменные. Обычно fork () s сразу следует за exec () s, и поэтому кажется, что fork () - это то, что нужно искать, в то время как на самом деле это exec (). Вы можете запускать команды без fork () сначала с помощью команды exec, и процессы, запущенные этим методом, также не будут иметь доступа к невыгруженным переменным:

$ noexport=noexport; export export=export; exec bash -c 'echo execd process: $noexport $export; execd=execd'; echo parent: $execd
execd process: export

Обратите внимание, что мы не видим parent: на этот раз, потому что мы заменили родительскую оболочку командой exec, поэтому для выполнения этой команды ничего не осталось.

0
задан user3558540 16 January 2019 в 22:28
поделиться