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 gotopolecenie 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 shoptpolecenia, 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=TRUEprzed uruchomieniem skryptu.
Etykiety są komentarzami, więc nie spowodują błędów składniowych, jeśli wyłączymy nasze goto(ustawiając gotoopcję :„no-op”), ale oznacza to, że musimy zacytować je w naszych gotowypowiedziach.
Ilekroć korzystasz z jakiegokolwiek gotorozwią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 gotooświadczeń.
gotobashu (przynajmniej takcommand not foundmi mówi ). Czemu? Są szanse, że istnieje lepszy sposób, aby to zrobić.