'timeout'と一緒に使用すると、'read'組み込み機能は無期限に中断されます。

'timeout'と一緒に使用すると、'read'組み込み機能は無期限に中断されます。

以下のスクリプトはorと完全に機能しますが、orbashとは機能しません。押した後もまだ機能しません。でのみ作業できますが、では作業できません。sudo bashshenter^C^\^Zsudo bash

printf '#!/bin/sh\nread var\n' > myscript
chmod +x myscript
sh -c "timeout -k 1 10 ./myscript"
# it does work when `bash` is used instead of `sh`

を使用できることを知っていますread -t 10。 (次のバージョンでは利用できず、次のようにsh動作します。ただとにかく使用を中止するとtimeout。 )しかし、私がそれを使う理由は(他のもの)にそれが必要timeoutだからです。私は解決策は必要ありませんが、/物事の説明が必要で、andの解決策を探したいと思います。readmyscriptbashsudo bashtimeoutread

答え1

なぜこれが起こるのかはまだわかりませんが、これはさまざまなシェルがシグナルを実行して処理する方法に関連しています。どうやらこんな形ですね一部解決策:

sh -c "timeout --foreground -k 1 5 ./myscript"

以下と同じsudo bash

sudo bash -c "timeout --foreground -k 1 5 ./myscript"

man timeout次のように説明しますか?

--foreground

       when not running timeout directly from a shell prompt,

       allow COMMAND to read from the TTY and get TTY signals; in  this
       mode, children of COMMAND will not be timed out

これが何を意味するのか、結果が何であるかはよくわかりませんが、おそらくこれはあなたや他の人に役立ちます。

関連情報