控制操作符作为bash脚本中的可选参数

时间:2017-04-23 07:26:53

标签: bash shell

我正在尝试在后台运行程序。有没有办法可选地传递控制运算符。类似的东西:

if some_condition
    bg=&
fi

myprog $bg

但是,正如我所看到的,bash(正确地)将$bg视为myprog的参数。我想让myprog在后​​台运行。

有办法做到这一点吗?

2 个答案:

答案 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的命令是在前台还是后台。