Jeśli testujesz / debugujesz skrypt bash i po prostu chcesz pominąć jedną lub więcej sekcji kodu, oto bardzo prosty sposób, aby to zrobić, a także bardzo łatwo go znaleźć i usunąć później (w przeciwieństwie do większości metod opisane powyżej).
#!/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"
Aby przywrócić skrypt do normy, po prostu usuń wszystkie wiersze za pomocą GOTO
.
Możemy również upiększyć to rozwiązanie, dodając goto
polecenie jako 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"
Aliasy zwykle nie działają w skryptach bash, więc potrzebujemy shopt
polecenia, aby to naprawić.
Jeśli chcesz mieć możliwość włączania / wyłączania swoich goto
, potrzebujemy trochę więcej:
#!/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"
Następnie możesz to zrobić export DEBUG=TRUE
przed uruchomieniem skryptu.
Etykiety są komentarzami, więc nie spowodują błędów składniowych, jeśli wyłączymy nasze goto
(ustawiając goto
opcję :
„no-op”), ale oznacza to, że musimy zacytować je w naszych goto
wypowiedziach.
Ilekroć korzystasz z jakiegokolwiek goto
rozwiązania, musisz uważać, aby przeskakujący kod nie ustawiał żadnych zmiennych, na których będziesz polegać później - być może trzeba przenieść te definicje na początek skryptu lub nieco powyżej twoich goto
oświadczeń.
goto
bashu (przynajmniej takcommand not found
mi mówi ). Czemu? Są szanse, że istnieje lepszy sposób, aby to zrobić.