От man 1 bash
:
Каждая команда в конвейере выполняется как отдельный процесс (т. Е. В подоболочке).
Ты получаешь из подоболочки; переменная задается в подоболочке, а не в запущенной оболочке Parent.sh
.
Это будет источник Child.sh
в правой оболочке:
# Inside Parent.sh source ./Child.sh > >(sed 's/\(.*\)/\t\1/') echo "ChildVariable=$"
хотя теперь вывод sed
может появиться после вывода echo
( условие гонки ). На данный момент я думаю, что лучший способ справиться с этой проблемой - это перепроектировать всю программу, чтобы вам не нужно было фильтровать вывод из какого-либо сценария.
Вы помечено Баш так source
и замена процесса ( > >(…)
) в порядке. Чтобы сделать это переносимым (-ish?), Нужно использовать .
вместо негоsource
и ввести некоторые трюки с fifos .