我有一个父脚本
while read cmd
do
nohup ./script ${cmd[@]} &>> log &
done < ~/list
执行这个子脚本
while true
do
eval "${CMD[@]}"
#${CMD[@]}
#./panic
done
使用此命令列表
node ~/www/splash/app.js
node ~/www/splash-two/app.js
当子脚本调用
eval ${CMD[@]}
它时,它会以我期望的方式运行该命令而没有任何抱怨,但是当我尝试删除 eval 并使用
${CMD[@]}
它运行命令时,它会抛出错误
Error: Cannot find module '/home/rumplefraggle/SYS/RABBOT/~/www/splash/app.js'
现在我想这可能与节点命令有关,所以我尝试
ls ~
作为命令执行,它抛出了 ~ 找不到的错误。
回应 ${@} 而不运行它会像我期望的那样扩展。
此外,手动将命令插入子脚本也可以按预期工作
我不明白为什么 eval 有效,而简单地使用 ${@} 运行命令则无效。是什么导致 ${@} 不扩展 ~ ?
为什么使用 ${@} 时节点会将目录名称附加到命令中?