тройник вызывает зависание скриптов bash

2476
Terry

У меня есть скрипт, который вызывает ряд других скриптов установки

./script1.sh 2>&1 | tee script1.log<br> ./script2.sh 2>&1 | tee script2.log<br> ./script3.sh 2>&1 | tee script3.log<br> 

Все они выглядят нормально до последнего, который вызывает пользовательский скрипт инициализации. Этот скрипт инициализации запускается daemonкак /usr/local/daemon&. т.е. ставит это на задний план.

Объедините это с использованием, teeи основной скрипт зависнет, так как финал teeникогда не завершится.

Скрипт инициализации - это приложение .NET, работающее в режиме моно, поэтому я очень мало контролирую его. Если я не пользуюсь, teeто все выглядит хорошо. Запуск последней команды из командной строки имеет тот же эффект.

Если бы кто-нибудь мог предложить способ сделать скрипт чистым, я был бы благодарен. На данный момент я переместил вызов сценария инициализации из script3 в родительский сценарий, и он работает нормально, но, конечно, он не зарегистрирован.

2
Столкнулся с этой проблемой, перенаправляя вывод из инструмента сборки грузов ржавчины, также нашел эту тему по теме: http://compgroups.net/comp.unix.aix/weird-tee-command-hang-korn-shell/1252821, пока я не видел хороших решений, кроме как обойти проблему. ideasman42 7 лет назад 0

2 ответа на вопрос

1
Valmiky Arquissandas

Это может быть не лучшим ответом, но вы можете сделать tee script3.log &(с амперсандом в конце), чтобы скрипт мог завершиться без зависания. У него действительно есть побочный эффект завершения сценария перед завершением script3.sh.

0
Ashok Vairavan

Tee не выйдет изящно, пока не закроется stdout как родительского, так и дочернего процесса. Попробуйте перенаправить стандартный вывод демона

/usr/local/daemon > /dev/null 2>&1 & 

Похожие вопросы