为什么以下不起作用?: while true;执行“$my_command”;睡觉1;完毕

为什么以下不起作用?: while true;执行“$my_command”;睡觉1;完毕

跟进最上面的答案这个问题,我想我可以:

1)定义命令:

cmd='for x in $(my_command | grep keyword | cut -d" " -f1); do command2 "arguments" $x; done'

2)循环运行如下

while true; do "$cmd"; sleep 1; done

但是,上面的方法不起作用,我得到以下结果

zsh: command not found for x in $(......
zsh: command not found for x in $(......
zsh: command not found for x in $(......
...

有什么想法吗?

澄清:

如果我运行for x in $(my_command | grep keyword | cut -d" " -f1); do command2 "arguments" $x; done'它就完美了。

附录:

我注意到,如果我使用eval,它就会起作用,即:

while true; do eval "$cmd"; sleep 1; done

cmd每秒运行一次命令

答案1

如果要准备在同一 shell 中运行的命令,请使用函数。

cmd () {
  for x in $(my_command | grep keyword | cut -d" " -f1); do
    command2 "arguments" $x
  done
}
while true; do cmd; sleep 1; done

答案2

通过在 周围加上引号$cmd,您将要求 shell 运行一个与该名称完全相同的命令。没有名为“for x in $(...”的命令;事实上,在我的系统上,甚至没有名为“for”的命令 - 它是一个 shell 关键字。要运行 的内容$cmd,您必须使用eval

相关内容