ShellBusybox
Busybox timeout
命令的返回狀態
我正在編寫一個 shell 腳本,它應該在各種不同的發行版上執行,其中一些正在使用,而另
busybox
一些則沒有。該腳本使用該
timeout
命令來確定它執行的命令是否執行的時間長於<time>
或沒有。對於使用 的發行版,coreutils
timeout
這沒有問題,因為當timeout
必須終止命令時,它總是返回124
,所以這很簡單。我的問題是,當我在
Alpine Linux
(使用 busybox )上執行相同的命令時,退出狀態是0
在超時後必須終止命令,但是當我在 Ubuntu 中使用包中的timeout
命令時,它會以.busybox``143
為什麼
timeout
這兩個來自的命令busybox
都給我不同的返回值?是否有任何一致性或規則可用於確定命令是否超時?
Alpine Linux 可能有更早版本的busybox。一個簡單的解決方案是在您的原始命令中添加另一個可以測試的具有某些副作用的命令,例如將一些輸出寫入標準輸出或文件。
例如,假設您希望原始命令的超時時間為 1
sleep 2
,而不是timeout 1 sleep 2
做
ok=$(timeout 1 bash -c 'sleep 2; echo ok')
並測試
$ok
確定。顯然,如果您的命令寫入標準輸出,您需要重定向它,例如將其複製到 fd 3 並重定向到:exec 3>&1 ok=$(timeout 1 bash -c 'my command >&3; echo ok') exec 3>&-
或將其
echo ok
放入文件中。