我觉得这应该很简单,但引用之类的东西总是让我在 bash 中感到困惑。我试图通过 ssh 连接运行命令,我想使用 timeout
用这个命令。对于简单的命令来说一切都很好,但现在我想运行这样的东西(只是一个模拟):
while read id; do
find . -name $id -exec echo '{}' \;
find . -name ${id}-other -exec echo '{}' \;
done < <(grep foo foo.txt | awk '{print $1}')
所以我尝试这个:
timeout 60 while read id; do find . -name $id -exec echo '{}' \;; find . -name ${id}-other -exec echo '{}' \;; done < <(grep foo foo.txt | awk '{print $1}')
这当然行不通。所以我尝试将它包装在 bash -c
中,但我真的不知道如何正确地逃避它......
任何帮助将不胜感激..我知道这可能是某些东西的重复,但我实际上环顾四周,我不能完全适应我在这里找到的例子。
最佳答案
timeout
的参数是一个命令。它不是 shell 表达式。也就是说,它是实用程序的文件名,后跟该实用程序的参数。 (您可以使用重定向,但重定向应用于 timeout
命令;它们不会被 timeout
解释。由于 timeout
执行指定的命令在相同的执行环境中,重定向将被命令继承。)
正如你所说,你可以使用 bash 命令来运行任何 bash 表达式,但引用很尴尬。可以使用此处文档简化引用:
timeout 60 bash <<"EOF"
while read id; do
find . -name $id -exec echo '{}' \;
find . -name ${id}-other -exec echo '{}' \;
done < <(grep foo foo.txt | awk '{print $1}')
EOF
关于linux - 将 while 循环传递给超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32132624/