2012-08-10 75 views
1

所以,我認定我的bash腳本的行爲,我覺得很奇怪。shell腳本,子shell,子腳本,管道 - (?)WEIRD CTRL + C信號傳播

下面是測試腳本:

echo "start of script" 

(

echo "start of subshell" 

cat > /tmp/$$ << EOF 
trap 'exit 99' SIGINT 

echo "sleep 10, hit ctrl+c now" 
sleep 10 
EOF 

chmod +x /tmp/$$ 
/tmp/$$ 

echo "end of subshell" 

#) 
) | tee -a /tmp/$$.log 

echo "end of script" 

所以,你可以看到,我用它來輕鬆地創建一個子shell管道輸出進行日誌記錄括號。

這裏面子shell,我跑映入CTRL + C信號和簡單地退出腳本的腳本。

因此,根據如果我管子外殼的輸出與否,下標期間擊打CTRL + C時的行爲(睡眠10)不同。

隨着|三通-a /tmp/$$.log,輸出顯示:

[/tmp] ./test.sh 
start of script 
start of subshell 
sleep 10, hit ctrl+c now 
end of script 

沒有管和三通,輸出顯示:

[/tmp] ./test.sh 
start of script 
start of subshell 
sleep 10, hit ctrl+c now 
**end of subshell** 
end of script 

有人可以請解釋這種現象?有沒有辦法確保下標的末尾不會像管和T恤一樣跳過?

謝謝

回答

1

嘗試使用tee選項「-i」。

(
#script 
) | tee -i -a /tmp/$$.log