Définir un argument avec bash

Je lance fréquemment une simple commande bash:

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

qui fonctionne correctement.

Mais maintenant, j’essaie de le scripter dans un fichier bash et de le rendre plus flexible:

 #!/bin/bash INSTALL_CMD=rpm INSTALL_OPT="-Uvh --define '_transaction_color 3'" ${INSTALL_CMD} ${INSTALL_OPT} myPackage.rpm 

Cependant, cela continue à générer l’erreur:

 error: Macro % has illegal name (%define) 

L’erreur provient de comment --define et de la _transaction_color citée est gérée.
J’ai essayé une variété d’échappées, de phrasés différents, faisant même de INSTALL_OPT un tableau, géré avec ${INSTALL_OPT[@]} .

Jusqu’à présent, mes tentatives n’ont pas fonctionné.
Clairement, ce que je veux est extrêmement simple. Je ne sais pas comment le faire.

Comment puis-je obtenir bash pour gérer correctement mon argument --define ?

Le problème est que les devis ne sont pas traités après la substitution de variables. Il semble donc que vous '_transaction_color de définir une macro nommée '_transaction_color .

Essayez d’utiliser un tableau:

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

puis:

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

Il est important de mettre ${INSTALL_OPT[@]} guillemets pour obtenir la requotting.

Cela pourrait être un problème de base avec le fractionnement des mots dans l’espace:

Essayer:

 #!/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