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[@]}.

到目前为止,我的尝试没有奏效。
显然,我想要的非常简单。我只是不确定如何完成它。

如何让 bash--define正确处理我的论点?

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 回答