linux - 将 while 循环传递给超时

标签 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 中,但我真的不知道如何正确地逃避它......

任何帮助将不胜感激..我知道这可能是某些东西的重复,但我实际上环顾四周,我不能完全适应我在这里找到的例子。

最佳答案

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/

相关文章:

python - ssh 使用 Python 限制命令

mysql - XAMPP Linux : make mysql accessible by just typing "mysql"

bash - 如何终止 bash 文件中的进程? (.sh)

bash - Bash 中的管道输出和捕获退出状态

linux - 从 ELFkickers 编译 sstrip for Ubuntu10.04 : asm/elf. h 问题

java - 在远程 Linux 机器上编辑文件?

java - 在 JAVA 中运行 Linux 命令的转义序列无效

bash - 替代 : cut -d <string>?

php - 如何从 PHP 使用 bash 脚本?

java - 如何判断当前 bash 脚本是否被调用脚本调用