0

我想在后台和 bash 中选择性地执行一组命令。像这样的东西

#!/bin/bash
BGR=""
if [ foo ] ; then
   BGR=\&
fi
cmd1 $BGR
cmd2 $BGR
cmd3 $BGR
wait

但这对于 bash 来说似乎是不可能的。如果foo为真,则命令评估为

+ cmd1 '&'
+ cmd2 '&'
+ cmd3 '&'

所以 & 只是另一个论点。

有没有其他方法可以实现这一目标?除了代码重复之外,我还编写了具有不同行为的 if/then/else 块。

4

2 回答 2

3

您可以将 if-else-clause 移动到函数中以避免代码重复,例如:

function execute() {
    if [[ -n "$BGR" ]]; then
        "$@" &
    else
        "$@"
    fi
}

execute cmd1 arg1
execute cmd2 arg2
于 2012-07-27T17:13:04.273 回答
2
eval cmd1 $BGR
eval cmd2 $BGR
eval cmd3 $BGR
wait
于 2013-05-22T10:11:51.170 回答