7

簡単な bash コマンドを頻繁に実行します。

rpm -Uvh --define "_transaction_color 3" myPackage.rpm

これは正しく機能します。

しかし今、私はそれをbashファイルにスクリプト化して、より柔軟にしようとしています:

#!/bin/bash
INSTALL_CMD=rpm
INSTALL_OPT="-Uvh --define '_transaction_color 3'"

${INSTALL_CMD} ${INSTALL_OPT} myPackage.rpm

ただし、これによりエラーが発生し続けます。

error: Macro % has illegal name (%define)

エラーはどのように発生して--defineおり、引用された_transaction_colorものは処理されます。
さまざまなエスケープ、さまざまな言い回し、さらにINSTALL_OPTは配列の作成を試みました${INSTALL_OPT[@]}

これまでのところ、私の試みはうまくいきませんでした。
明らかに、私が欲しいものは非常に単純です。それを達成する方法がわかりません。

--definebash で引数を適切に処理するにはどうすればよいですか?

4

2 に答える 2

13

問題は、変数置換後に引用符が処理されないことです。という名前のマクロを定義しようとしているようです'_transaction_color

配列を使用してみてください:

INSTALL_OPT=(-Uvh --define '_transaction_color 3')

それから:

"$INSTALL_CMD" "${INSTALL_OPT[@]}" myPackage.rpm

${INSTALL_OPT[@]}再引用を取得するには、二重引用符で囲むことが重要です。

于 2012-11-13T17:28:40.290 に答える
-1

スペースでの単語分割に関する bash の問題である可能性があります。

試す:

#!/bin/bash

IFS=$'\n'

INSTALL_CMD=rpm
INSTALL_OPT='-Uvh'
INSTALL_OPT_DEFINE='--define _transaction_color 3'

${INSTALL_CMD} ${INSTALL_OPT} ${INSTALL_OPT_DEFINE} myPackage.rpm
于 2012-11-13T17:31:11.817 に答える