运行命令指定时间,如果时间超过则中止

运行命令指定时间,如果时间超过则中止

我想知道如何在指定的时间内运行命令,例如一分钟,如果它没有完成执行,那么我应该能够停止它。

答案1

使用timeout

NAME
       timeout - run a command with a time limit

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

(以防万一,如果你没有这个命令,或者你需要与非常非常旧的 shell 兼容并且有其他几个完全特定的要求......看看这个这个问题;-))

答案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 中的重定向的所有内容

相关内容