以下命令行调用
timeout
(没有意义,只是为了测试)未按预期工作。它等待10秒钟,但在3秒钟后无法停止命令的工作。为什么?timeout 3 ls | sleep 10
你的命令是在运行timeout 3 ls
并将其输出导入到sleep 10
中。因此,sleep
命令不受timeout
的控制,总是会休眠10秒。
以下类似的命令会产生期望的效果。
timeout 3 bash -c "ls | sleep 10"
tail -f file | timeout 20s bash -c 'grep "a" | sort | uniq'
没有输出任何内容。 - Ulysse BNls
命令可能需要很长时间。 - jordanm我知道实现你想要的效果的唯一方法是将管道命令放入单独的文件中:
cat > script
ls | sleep 10
^D
timeout 3 sh script
timeout 3 sh <(echo "ls | sleep 10")
- Shawn Chin只需在管道的最后一个命令上设置超时即可:
# Exits after 3 seconds with code 124
ls | timeout 3 sleep 10
# Exits after 1 second with code 0
ls | timeout 3 sleep 1
timeout
会执行ls | sleep 10
。因为ls | sleep 10
至少需要 10 秒钟,所以timeout
应该会停止它。但是timeout
没有停止。 - John Threepwood