5

次のコマンド ライン呼び出しtimeout(テスト上の理由で意味がありません) は、期待どおりに動作しません。10 秒間待機し、3 秒後にコマンドの動作を停止しません。なんで ?

timeout 3 ls | sleep 10
4

4 に答える 4

18

あなたのコマンドが行っていることはtimeout 3 ls、その出力を実行してパイプすることsleep 10です。したがって、sleepコマンドは の制御下になく、timeout常に 10 秒間スリープします。

このようなものは、望ましい効果をもたらします。

timeout 3 bash -c "ls | sleep 10"
于 2012-08-15T12:06:41.703 に答える
3

「ls」コマンドの実行に 3 秒もかからないはずです。私が考えているのは、(1) ls で 3 秒後にタイムアウトし (ls の実行に 3 秒近くかかるべきではないため、これは発生していません)、(2) 結果を sleep 10 にパイプすることです。与えている数値以外の引数は必要ありません。したがって、ls が発生し、タイムアウトは問題ではなく、bash は 10 秒間スリープします。

于 2012-08-13T22:20:31.383 に答える
2

あなたが求めている効果を得る方法を私が知っている唯一の方法は、パイプされたコマンドを別のファイルに入れることです:

cat > script
ls | sleep 10
^D

timeout 3 sh script
于 2012-08-13T22:55:24.147 に答える