Eseguo spesso un semplice comando bash:
rpm -Uvh --define "_transaction_color 3" myPackage.rpm
che funziona correttamente.
Ma ora sto provando a scriverlo 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 continua a generare l’errore:
error: Macro % has illegal name (%define)
L’errore viene da come vengono --define
e il quotato _transaction_color
.
Ho provato una varietà di espressioni di escape diverse, anche facendo di 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 il mio argomento --define
?
Il problema è che le quotazioni non vengono elaborate dopo la sostituzione delle variabili. Quindi sembra che tu stia cercando di definire una macro chiamata '_transaction_color
.
Prova ad usare un array:
INSTALL_OPT=(-Uvh --define '_transaction_color 3')
poi:
"$INSTALL_CMD" "${INSTALL_OPT[@]}" myPackage.rpm
È importante mettere ${INSTALL_OPT[@]}
tra virgolette per ottenere il requoting.
Potrebbe essere un problema di fondo con la divisione delle parole nello spazio:
Provare:
#!/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