while:未找到命令

while:未找到命令

我试图将其作为愚人节的恶作剧:让 Linux 机器每隔几秒在 shell 中显示一条消息。

我的想法是通过启动一个作为后台作业运行的无限循环(在 .bashrc 中)来实现这一点。

例如,这就是我想要的:

while true ; do echo Evil Message; sleep 10; done

为了在后台运行它,我尝试了:

cmd="while true ; do echo Evil Message; sleep 10;"
$cmd &

但这失败并出现错误:

while: command not found

为什么我会收到错误消息?有没有办法让这个脚本工作?

答案1

while不是命令,而是 shell 关键字。关键字在变量扩展发生之前被识别,因此在扩展之后就为时已晚。

您有多种选择:

  1. 根本不要使用变量。

    while true ; do echo Evil Message; sleep 10; done &
    
  2. 用于eval对变量的扩展值运行 shell

    eval "$cmd" &
    
  3. 调用 shell 来运行循环

    bash -c "$cmd" &
    
  4. 使用函数(通常用于存储代码):

    cmd() { while true ; do echo Evil Message; sleep 10; done; }
    cmd &
    

答案2

另一种选择(除了 choroba 的答案中列出的所有好选项之外)是在子 shell 中运行它,如下所示:

(while true; do echo Evil Message; sleep 10; done;) &

这将导致bash在后台运行您的代码的另一个实例。

相关内容