0

オプションで一連のコマンドをバックグラウンドで bash を使用して実行したいと考えています。このようなもの

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

しかし、これは bash では不可能のようです。fooが true の場合、コマンドは次のように評価されます

+ 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 に答える