Se stai testando / eseguendo il debug di uno script bash e vuoi semplicemente saltare avanti una o più sezioni di codice, ecco un modo molto semplice per farlo che è anche molto facile da trovare e rimuovere in seguito (a differenza della maggior parte dei metodi descritto sopra).
#!/bin/bash
echo "Run this"
cat >/dev/null <<GOTO_1
echo "Don't run this"
GOTO_1
echo "Also run this"
cat >/dev/null <<GOTO_2
echo "Don't run this either"
GOTO_2
echo "Yet more code I want to run"
Per riportare lo script alla normalità, basta eliminare tutte le righe con GOTO
.
Possiamo anche prettificare questa soluzione, aggiungendo un goto
comando come alias:
#!/bin/bash
shopt -s expand_aliases
alias goto="cat >/dev/null <<"
goto GOTO_1
echo "Don't run this"
GOTO_1
echo "Run this"
goto GOTO_2
echo "Don't run this either"
GOTO_2
echo "All done"
Gli alias di solito non funzionano negli script bash, quindi abbiamo bisogno del shopt
comando per risolverlo.
Se vuoi essere in grado di abilitare / disabilitare i tuoi goto
, abbiamo bisogno di un po 'di più:
#!/bin/bash
shopt -s expand_aliases
if [ -n "$DEBUG" ] ; then
alias goto="cat >/dev/null <<"
else
alias goto=":"
fi
goto '#GOTO_1'
echo "Don't run this"
#GOTO1
echo "Run this"
goto '#GOTO_2'
echo "Don't run this either"
#GOTO_2
echo "All done"
Quindi puoi farlo export DEBUG=TRUE
prima di eseguire lo script.
Le etichette sono commenti, quindi non causeranno errori di sintassi se disabilitiamo i nostri goto
(impostando goto
su ' :
' no-op), ma questo significa che dobbiamo citarli nei nostrigoto
dichiarazioni.
Ogni volta che usi qualsiasi tipo di goto
soluzione, devi fare attenzione che il codice che stai saltando non imposta alcuna variabile su cui fai affidamento in seguito - potresti dover spostare quelle definizioni nella parte superiore dello script, o appena sopra una delle tue goto
dichiarazioni.
goto
in bash (almeno dicecommand not found
per me). Perché? È probabile che ci sia un modo migliore per farlo.