mi piacerebbe utilizzare getopts
all'interno di una funzione che ho definito nel mio .bash_profile. L'idea è che vorrei passare alcuni flag a questa funzione per alterarne il comportamento.Utilizzando getopts all'interno di una funzione di Bash
Ecco il codice:
function t() {
echo $*
getopts "a:" OPTION
echo $OPTION
echo $OPTARG
}
Quando invoco così:
t -a bc
ottengo questo output:
-a bc
?
Cosa c'è di sbagliato? Mi piacerebbe ottenere il valore bc
senza spostare e analizzare manualmente. Come utilizzare correttamente getopts
all'interno di una funzione?
EDIT: corretto il mio frammento di codice per provare $ OPTARG, senza alcun risultato
EDIT # 2: OK scopre il codice va bene, il mio guscio è stato in qualche modo incasinato. Aprire una nuova finestra l'ha risolto. Il valore di arg era in effetti in $ OPTARG.
Avrei votato questa risposta un centinaio di volte se potessi. Questo mi stava facendo impazzire !! –
1.) Il '1' in' 1> & 2' non è necessario. 2.) Ti sei perso per definire 'a',' o' e 'OPTARG' come locali. 3.) Il 'exit' non uscirà dallo script ma solo una sotto-shell. Per uscire dallo script è necessario 'set -e' nella shell esterna e' exit 1' nella sub-shell. L'esempio non innesca il problema, ma un 'MSG = $ (pippo ...)' lo farà. – ceving
@ceving 1) Si tratta di uno stile di codifica ma, no, non è necessario secondo la definizione della lingua. 2) Concordato, quelli dovrebbero essere locali. 3) Come hai detto, l'uscita * * uscirà dallo script nel mio esempio. Ovviamente 'exit' non uscirà da sub shell ma questo non è un problema specifico a questa domanda. Non devi usare 'set -e', devi solo assicurarti di prendere l'errore e' MSG = $ (foo ...) || die' funziona altrettanto bene. 'set -e' è una soluzione al problema [ma non è a prova di idiota] (http://mywiki.wooledge.org/BashFAQ/105) e io, come molti altri, non consiglio di usarlo. –