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