我试图将其作为愚人节的恶作剧:让 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 关键字。关键字在变量扩展发生之前被识别,因此在扩展之后就为时已晚。
您有多种选择:
根本不要使用变量。
while true ; do echo Evil Message; sleep 10; done &
用于
eval
对变量的扩展值运行 shelleval "$cmd" &
调用 shell 来运行循环
bash -c "$cmd" &
使用函数(通常用于存储代码):
cmd() { while true ; do echo Evil Message; sleep 10; done; } cmd &
答案2
另一种选择(除了 choroba 的答案中列出的所有好选项之外)是在子 shell 中运行它,如下所示:
(while true; do echo Evil Message; sleep 10; done;) &
这将导致bash
在后台运行您的代码的另一个实例。