ho usato un semplice preambolo bash come questa nel mio script:Utilizzare set set -e/+ e in bash con funzioni
#!/bin/bash
set -e
In concomitanza con la modularità/usando le funzioni di questo mi ha morso oggi.
Quindi, dire che ho una funzione da qualche parte come
foo() {
#edit: some error happens that make me want to exit the function and signal that to the caller
return 2
}
Idealmente mi piacerebbe essere in grado di utilizzare più file di piccole dimensioni, includo le loro funzioni in altri file e quindi chiamare queste funzioni come
set +e
foo
rc=$?
set -e
. Questo funziona esattamente per due livelli di routine. Ma se foo chiama anche subroutine come questa, l'ultima impostazione prima del ritorno sarà set -e
, che farà uscire lo script al ritorno - Non posso sovrascriverlo nella funzione di chiamata. Allora, che cosa ho dovuto fare è
foo() {
#calling bar() in a shielded way like above
#..
set +e
return 2
}
che trovo molto controintuitivo (e anche non quello che voglio - e se in alcuni contesti vorrei utilizzare la funzione senza schermatura contro i guasti, mentre in altri contesti Voglio gestire la pulizia?) Qual è il modo migliore per gestire questo? Btw. Lo sto facendo su OSX, non ho testato se questo comportamento è diverso su Linux.
attendere, potresti espandere? Devo aggiungere questo nel chiamante? Cosa fa il colon? –
Potresti spiegare come sto tornando? Come intendo allora segnalare l'errore dall'interno di una funzione? (scusate se non sono stato abbastanza chiaro - il 'return 2' è fatto solo in una condizione di errore –
Non lo siete, ma pensavo che lo foste. Il mio male, mi dispiace – Carpetsmoker