我正在编写一个偶尔运行的脚本,并从mysql db中取出作业。当我这样做时,我会运行以下内容:
job="/tmp/blah.sh arg1 arg2 arg3"
eval $job
我需要它在运行eval后立即继续运行,而不是等待其他脚本完成。有什么简单的方法可以做到这一点?我试过了
exec $job &
基于我在这里找到的一个帖子,但是反过来说,它运行了脚本,然后在“作业”完成后停止了,并停止了我的整个脚本。
编辑:
我正在运行的分离我的args和脚本的问题是作业有多行,看起来像:
/tmp/blah1.sh arg1 arg2 arg3 arg4
/tmp/blah2.sh null null null arg4
/tmp/blah3.sh arg1 null arg3 arg4
所以目前我只运行它:eval $ jobs:如果只有一行,如果有多个,我做一个for循环并运行每一行。在for循环中运行它以获取和分离args和脚本的最佳方法是什么?
答案 0 :(得分:4)
我不会使用eval
;相反,将命令名与参数分开,然后以正常方式调用命令。
jobCmd="/tmp/blah.sh"
jobArguments=( "arg1" "arg2" "arg3" )
$jobCmd "${jobArguments[@]}" &
答案 1 :(得分:1)
不要使用exec
- 它会将您正在运行的脚本替换为您正在调用的内容。
eval "$job" &
应该这样做。
更新:
eval
。&
。Enter
即可查看bash提示是否重新出现。