Establecer un argumento con bash [duplicado]

Resuelto abelenky asked hace 12 años • 2 respuestas

Con frecuencia ejecuto un comando bash simple:

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

que funciona correctamente.

Pero ahora estoy intentando escribirlo en un archivo bash y hacerlo más flexible:

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

${INSTALL_CMD} ${INSTALL_OPT} myPackage.rpm

Sin embargo, esto sigue generando el error:

error: Macro % has illegal name (%define)

El error proviene de cómo se maneja --definela cotización . Probé una variedad de escapes, diferentes frases, incluso hice una matriz, manejada con ._transaction_color
INSTALL_OPT${INSTALL_OPT[@]}

Hasta ahora, mis intentos no han funcionado.
Claramente, lo que quiero es extremadamente simple. Simplemente no estoy seguro de cómo lograrlo.

¿ Cómo puedo hacer que bash maneje mi --defineargumento correctamente?

abelenky avatar Nov 14 '12 00:11 abelenky
Aceptado

El problema es que las cotizaciones no se procesan después de la sustitución de variables. Parece que estás intentando definir una macro llamada '_transaction_color.

Intente usar una matriz:

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

entonces:

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

Es importante poner ${INSTALL_OPT[@]}comillas dobles para obtener la recotización.

Barmar avatar Nov 13 '2012 17:11 Barmar