我觉得这应该很简单,但引用和类似的东西总是让我困惑。我正试图通过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/