0

実行する必要があるコマンドを動的に構築する bash スクリプトを作成しようとしています。(lcov ファイルのマージ)

これまでのところ、コマンドラインを作成できました。結果は次のとおりです。

#!/bin/bash
LCOV_INPUT_FILES=""
while read FILENAME; do
    LCOV_INPUT_FILES="$LCOV_INPUT_FILES -a \"$FILENAME\""
done < <( find ../reports/coverage -name lcov.info )

echo lcov "${LCOV_INPUT_FILES}" -o ../reports/coverage.lcov
lcov "${LCOV_INPUT_FILES}" -o ../reports/coverage.lcov

シェルで出力の行を実行するechoと機能しますが、スクリプトからこのコマンドを実行できず、デバッグするための bash の優れた点がありません。

エコーから得られる出力の種類は次のとおりです。

lcov  -a "../reports/coverage/Chrome 26.0 (Linux)/lcov.info" -a "../reports/coverage/Firefox 20.0 (Linux)/lcov.info" -a "../reports/coverage/PhantomJS 1.8 (Linux)/lcov.info" -o ../reports/coverage.lcov

ここで何が問題なのか知っていますか?

よろしく、

ザビエル

4

1 に答える 1

3

二重引用符を使用する"${LCOV_INPUT_FILES}"と、bash は文字列全体を 1 つの単語として扱います。二重引用符がないと、bash は変数の値を空白で分割します。

文字列を作成する方法については、唯一のオプションは次を使用することevalです。

eval lcov "$LCOV_INPUT_FILES" -o ...

他のオプションもあります。配列を使用してパラメーターを格納できます

LCOV_INPUT_FILES+=(-a "$FILENAME")

次に、配列を二重引用符で囲んで展開します。

lcov "${LCOV_INPUT_FILES[@]}" -o ...
于 2013-04-19T13:22:56.437 に答える