指定した時間だけコマンドを実行し、タイムアウトした場合は中断します。

指定した時間だけコマンドを実行し、タイムアウトした場合は中断します。

特定の時間(たとえば、1分)でコマンドを実行する方法を知りたいです。実行が完了しない場合は停止できる必要があります。

答え1

使用timeout:

NAME
       timeout - run a command with a time limit

SYNOPSIS
       timeout [OPTION] DURATION COMMAND [ARG]...
       timeout [OPTION]

(このコマンドがない場合、または非常に古いシェルとの互換性が必要で、いくつかの完全に具体的な要件がある場合...これを確認してください。この問題;-))

答え2

timeoutファイルにリダイレクトを使用する方法

このcat場合この質問には(強調する):

45秒程度の大容量ファイルをキャプチャして画面に出力するにはどうすればよいですか?または別のファイルにリダイレクトしてください。

これが必要な場合:

cat /dev/ttyUSB0 > out.txt

...これだけではありません。

cat /dev/ttyUSB0

それではtimeoutうまくいきません。

# This *does* work!: timeout after 0.5 sec
timeout 0.5 cat /dev/ttyUSB0

# Does NOT work: try to redirect a response over serial to a file.
# Using `timeout` with redirection of stdout to a file does *not*
# seem to work!
timeout 0.5 cat /dev/ttyUSB0 > out.txt

だから解決策はするどのように機能するかは、まず出力を変数に保存し、timeoutそのセクションでのみ使用してから、次のようにファイルに書き込むことです。

response_str="$(timeout 0.5 cat /dev/ttyUSB0)"
printf "%s" "$response_str" > out.txt

また、見ることができます

  1. Stack Overflowに対する私の答えは次のとおりです。Bashのリダイレクトに関するすべて

関連情報