1
什麼時候管道程序終止,誰控制這個終止過程?我讀過Bash: why the pipe is terminated?,但它僅部分涵蓋了這個問題。在嘗試回答這個問題之後,我自己做了幾個例子來看看他們的結果。而這一次我不明白:(a.sh
):在bash中終止管道程序的策略是什麼?
#!/bin/bash
echoerr() { echo [email protected] 1>&2; }
echoerr a.sh started
sleep 1
echo 1
sleep 1
echo 2
sleep 1
echo 3
sleep 1 # Line 1
echo 4 # Line 2
echoerr a.sh finished
我運行它./a.sh | head -3
。輸出是:
a.sh started
1
2
3
從我理解,./a.sh
用SIGPIPE
信號終止的輸出,因爲需要沒有更多的數據讀取前3行輸入的後。但是,當我刪除要麼線1 要麼線2的輸出變化如下:
a.sh started
1
2
3
a.sh finished
所以我的問題是:
- 什麼是終止管道方案的政策?
- 爲什麼第1行會影響程序行爲?
- 爲什麼第2行會影響程序行爲?