Mi capita spesso di eseguire una semplice comando bash:Impostazione di una discussione con bash
rpm -Uvh --define "_transaction_color 3" myPackage.rpm
che funziona correttamente.
ma ora sto cercando di scrittura in un file bash, e renderlo più flessibile:
#!/bin/bash
INSTALL_CMD=rpm
INSTALL_OPT="-Uvh --define '_transaction_color 3'"
${INSTALL_CMD} ${INSTALL_OPT} myPackage.rpm
Tuttavia, questo mantiene genera l'errore:
error: Macro % has illegal name (%define)
L'errore è in arrivo da come viene gestito --define
e il numero _transaction_color
.
Ho provato una varietà di espressioni di sfasamento, fraseggio diverso, anche rendendo INSTALL_OPT
un array, gestito con ${INSTALL_OPT[@]}
.
Finora, i miei tentativi non hanno funzionato.
Chiaramente, quello che voglio è estremamente semplice. Non sono sicuro di come realizzarlo.
Come posso convincere bash a gestire correttamente l'argomento --define
?
Si è tentato 'INSTALL_OPT = '- Uvh --define _transaction_color 3'', giusto? –
@ sampson-chen: provato. "errore: Macro% _transaction_color ha un corpo vuoto". – abelenky
Questo perché bash legge gli argomenti come '-Uvh' e' --define' e ''_transaction_color' e' 3''. Devi ** usare un array in questo caso (come mostrato sotto nella risposta di Barmar): 'INSTALL_OPT = (- Uvh --define '_transaction_color 3')'. Quindi "$ {INSTALL_CMD}" $ {INSTALL_OPT [$ @]} "myPackage.rpm' funziona (con virgolette doppie, come ha menzionato). –