传递while循环到超时

时间:2015-08-21 04:58:23

标签: linux bash

我觉得这应该很简单,但是引用等等总是让我在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中,但我真的无法弄清楚如何正确地逃避它......

任何帮助都会受到赞赏..我知道这可能与某些东西重复,但实际上我已经环顾四周了,我可以完全适合我在这里找到的案例。

1 个答案:

答案 0 :(得分:3)

timeout的参数是命令是一个shell表达式。也就是说,它是实用程序的文件名,后跟该实用程序的参数。 (您可以使用重定向,但重定向应用于timeout命令;它们不由timeout解释。由于timeout在同一执行环境中执行指定的命令,重定向将由命令继承。)

正如您所说,您可以使用bash命令运行任何bash表达式,但引用很尴尬。使用here-docs可以简化引用:

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