次のコマンド ライン呼び出しtimeout
(テスト上の理由で意味がありません) は、期待どおりに動作しません。10 秒間待機し、3 秒後にコマンドの動作を停止しません。なんで ?
timeout 3 ls | sleep 10
あなたのコマンドが行っていることはtimeout 3 ls
、その出力を実行してパイプすることsleep 10
です。したがって、sleep
コマンドは の制御下になく、timeout
常に 10 秒間スリープします。
このようなものは、望ましい効果をもたらします。
timeout 3 bash -c "ls | sleep 10"
「ls」コマンドの実行に 3 秒もかからないはずです。私が考えているのは、(1) ls で 3 秒後にタイムアウトし (ls の実行に 3 秒近くかかるべきではないため、これは発生していません)、(2) 結果を sleep 10 にパイプすることです。与えている数値以外の引数は必要ありません。したがって、ls が発生し、タイムアウトは問題ではなく、bash は 10 秒間スリープします。
あなたが求めている効果を得る方法を私が知っている唯一の方法は、パイプされたコマンドを別のファイルに入れることです:
cat > script
ls | sleep 10
^D
timeout 3 sh script