2017-01-01 21 views
0

嘗試執行陷阱 - 休眠循環時遇到了一個奇怪的問題(可能是平臺特定的問題)。bash中的信號陷阱只能在RHEL7中運行一次(但不在Ubuntu中)

具體而言,下面的代碼:

saysomething() { 
    trap saysomething 37 
    echo "Hello there" 
    while true; do 
     sleep 1 
    done 
} 

echo "Current pid: $$" 
saysomething 

打印「你好」每次我發送它從在Ubuntu 14.04使用kill -37 <pid>另一殼的信號。

但是,在RHEL 7機器上,上述僅在第一次打印Hello there。之後,腳本繼續執行,但無法響應更多信號。

這種差異的原因是什麼?

+0

對不起!讀得太快。那麼也許你可以從功能之外做到這一點。 –

+1

你是否在兩臺機器上使用相同版本的'bash'? – chepner

+0

不,看起來像'bash'版本是不同的。 Ubuntu上的4.3.11和RHEL 7上的4.2.46會導致這種行爲上的明顯差異嗎? – balajeerc

回答

0

不是一個真正的答案,但是這是我最後使用以下作爲一種變通解決方法:

#!/usr/bin/env bash 

flag=false 

saysomething() { 
    flag=true 
    trap reset 37 
    echo "Hello there" 
    while [[ $flag == true ]]; do 
     sleep 1 
    done 
    saysomething 
} 

reset() { 
    flag=false 
} 

echo "Current pid: $$" 

saysomething 

我仍然無法解釋的行爲,雖然這種差異的原因。