Cri*_*scu 7 shell bash quoting
我试图将其作为愚人节的恶作剧:让 linux 机器每隔几秒钟在 shell 中显示一条消息。
我的想法是通过启动一个作为后台作业(在 .bashrc 中)运行的无限循环来实现这一点。
例如,这做我想要的:
while true ; do echo Evil Message; sleep 10; done
Run Code Online (Sandbox Code Playgroud)
为了在后台运行它,我尝试了:
cmd="while true ; do echo Evil Message; sleep 10;"
$cmd &
Run Code Online (Sandbox Code Playgroud)
但这失败并出现错误:
while: command not found
Run Code Online (Sandbox Code Playgroud)
为什么我收到错误?有没有办法让这个脚本工作?
cho*_*oba 17
while不是命令,它是一个 shell 关键字。关键字在变量扩展发生之前被识别,所以在扩展之后,为时已晚。
您有多种选择:
根本不要使用变量。
while true ; do echo Evil Message; sleep 10; done &
Run Code Online (Sandbox Code Playgroud)用于eval在变量的扩展值上运行 shell
eval "$cmd" &
Run Code Online (Sandbox Code Playgroud)调用一个 shell 来运行循环
bash -c "$cmd" &
Run Code Online (Sandbox Code Playgroud)使用函数(通常用于存储代码):
cmd() { while true ; do echo Evil Message; sleep 10; done; }
cmd &
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
9977 次 |
| 最近记录: |