Busybox `timeout`コマンドステータスを返す

Busybox `timeout`コマンドステータスを返す

私はさまざまなディストリビューションで実行する必要があるシェルスクリプトを作成しています。その一部は機能しbusybox、一部は機能しません。

スクリプトは、このtimeoutコマンドを使用して、実行するコマンドを実行するのに時間がかかったか、<time>それともかかったかを確認します。コマンドを終了する必要があるときは常に返されるので、使用されているデプロイメントはcoreutils timeout問題にならないので簡単です。timeout124

Alpine Linux私の問題は、busyboxを使用して同じコマンドを実行するときにシャットダウンステータスがタイムアウトした後にコマンドを終了する必要があることです。しかし、0Ubuntuのパッケージtimeoutでコマンドを使用するbusybox143

この2つのtimeoutコマンド(すべてbusybox)が異なる戻り値を提供するのはなぜですか?

コマンドがタイムアウトしたことを確認するために使用できる一貫性または規則はありますか?

ベストアンサー1

Alpine Linuxには古いバージョンのbusyboxがあるかもしれません。簡単な解決策は、いくつかの出力をstdoutやファイルに書き込むなど、テストできるいくつかの副作用がある他のコマンドを元のコマンドに追加することです。

sleep 2たとえば、元のコマンドのタイムアウトが1ではなく1になりたいとします。

timeout 1 sleep 2

する

ok=$(timeout 1 bash -c 'sleep 2; echo ok')

そして$ok正常なのかテストしてみてください。明らかに、コマンドがstdoutに書き込まれたら、それをリダイレクトする必要があります。たとえば、これをfd 3にコピーしてその場所にリダイレクトします。

exec 3>&1
ok=$(timeout 1 bash -c 'my command >&3; echo ok')
exec 3>&-

またはecho okファイルに書きます。

おすすめ記事