Bash:「または60秒ごとに」行を読みます。

Bash:「または60秒ごとに」行を読みます。

次の例では、「または60秒ごとに」をどのように実装しますか?

prints_output_in_random_intervals | \
while read line "or every 60s"
do
  do_something
done

ベストアンサー1

組み込みのbashドキュメントにはhelp read次のものがあります。

-t timeout  time out and return failure if a complete line of input is
            not read withint TIMEOUT seconds.  The value of the TMOUT
            variable is the default timeout.  TIMEOUT may be a
            fractional number.  If TIMEOUT is 0, read returns success only
            if input is available on the specified file descriptor.  The
            exit status is greater than 128 if the timeout is exceeded

タイムアウトに達して返されると失敗するため、readこの状況でもループは終了します。これを防ぐには、read次のように終了状態を無視します。

while read -t 60 line || true; do
    ...
done

または

while true; do
    read -t 60 line
    ...
done

おすすめ記事