Shell

Busybox timeout 命令的返回狀態

  • October 17, 2016

我正在編寫一個 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放入文件中。

引用自:https://unix.stackexchange.com/questions/316788