我正在尝试在后台运行程序。有没有办法可选地传递控制运算符。类似的东西:
if some_condition
bg=&
fi
myprog $bg
但是,正如我所看到的,bash(正确地)将$bg
视为myprog
的参数。我想让myprog
在后台运行。
有办法做到这一点吗?
答案 0 :(得分:1)
怎么样:
if some_condition
then
myprog &
else
myprog
fi
答案 1 :(得分:0)
我赞成James Brown的回答,但是,如果您只想指定run_in_background=false
run_cmd () {
echo "Running $@"
if $run_in_background; then
"$@" &
else
"$@"
fi
}
if [[ "$1" == '--bg' ]]; then
run_in_background=true
shift
fi
run_cmd "$@"
一次,那么也许你可以使用一个函数来判断它是否应该在后台运行或不运行。但是,这确实意味着您最初会写更多行,但如果您可能在后台运行很多行,您可以从中受益...
./script.bash --bg sleep 1
然后你可以像这样运行它:
... (Continuing from inside the script above)
run_cmd sleep 1
run_cmd echo hello
wait # Waits for background processes to finish
或者如果您可以在脚本本身内运行它:
run_cmd
然后,您可以通过省略或使用--bg
标志来确定传递给PostController
的命令是在前台还是后台。