控件运算符作为bash脚本中的可选参数
我正在尝试在后台随意运行一个程序。是否有一种方法可以选择性地通过控制操作员。比如:控件运算符作为bash脚本中的可选参数,bash,shell,Bash,Shell,我正在尝试在后台随意运行一个程序。是否有一种方法可以选择性地通过控制操作员。比如: if some_condition bg=& fi myprog $bg 然而,正如我所看到的,bash(正确地)将$bg视为myprog的参数。我正在尝试让myprog在后台运行 有办法做到这一点吗?怎么样: if some_condition then myprog & else myprog fi 我赞成James Brown的答案,但是,如果您只想指定一次mypro
if some_condition
bg=&
fi
myprog $bg
然而,正如我所看到的,bash(正确地)将$bg
视为myprog
的参数。我正在尝试让myprog
在后台运行
有办法做到这一点吗?怎么样:
if some_condition
then
myprog &
else
myprog
fi
我赞成James Brown的答案,但是,如果您只想指定一次
myprog
,那么您可以使用函数来确定它是否应该在后台运行。然而,这确实意味着你一开始会写更多的行,但是如果你在后台大量运行,你可能会从中受益
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
然后,您可以通过省略或使用
--bg
标志来确定传递给run_cmd
的命令是在前台还是在后台。eval myprog$bg
?为什么不“如果某个条件;那么myprog&;fi”?否则,您可以使用eval。我本来打算建议eval
,但是eval
是evil
。如果语句,使用和将更容易、更安全。@Robertseam你能详细说明一下eval是邪恶的吗?@ArunPrakashJana当使用eval
时,你必须非常小心,因为你可以运行不需要的命令(特别是在处理用户输入时)。尽可能避免使用eval
,只在需要时使用。我已经在这样做了。然而,我想知道是否有一种方法可以在一行中处理这个问题,而无需条件检查。如果您的目的是只指定myprog
一次,那么我在下面添加了一个解决方案,但是,如果您只运行myprog
一次,那么James的答案会更好。