跟进最上面的答案这个问题,我想我可以:
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
。