簡體   English   中英

無法從另一個bash腳本在后台執行bash腳本

[英]Unable to execute a bash script in background from another bash script

我有一個要從另一個Shell腳本在后台調用的Shell腳本。 這兩個腳本都是bash腳本。
第一個腳本(a.sh)類似於:

read a
echo 'something'
read b
echo 'something else'
# some if else conditions
nohup bash b.sh 2>&1 > /tmp/log &

當我嘗試執行上述腳本時: ./a.sh arg1 arg2 | tee log ./a.sh arg1 arg2 | tee log ,很奇怪,它卡在nohup行中以使第二個腳本b.sh完成,而應該沒有。

但是,當我在腳本中包含以下行時,它將按預期工作:
nohup bash b.sh 2>&1 > /tmp/log &

請幫忙。 如果需要,我也可以共享確切的腳本。

這是您想發生的事情:

  1. 腳本運行並輸出內容
  2. 該腳本在后台運行命令
  3. 腳本退出
  4. 管道關閉
  5. tee出口

這是正在發生的事情:

  1. 腳本運行並輸出內容
  2. 該腳本在后台運行命令,管道為stderr
  3. 腳本退出
  4. 管道仍通過后台命令保持打開狀態
  5. tee永遠不會退出。

通過將stderr指向日志文件而不是管道來修復它,以便后台進程不再保持管道打開。

2>&1和重定向的順序的含義已在其他答案中進行了解釋 ,並且shellcheck會在您的代碼中自動指出此問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM