Bir bash betiğini test ediyorsanız / hata ayıklama yapıyorsanız ve kodun bir veya daha fazla bölümünü geçip atlamak istiyorsanız, işte bunu daha sonra bulmanın ve kaldırmanın çok kolay olduğu çok basit bir yol var (yöntemlerin çoğunun aksine) Yukarıda tarif edilen).
#!/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"
Betiğinizi normale döndürmek için, ile satırları silin GOTO
.
Ayrıca, goto
takma ad olarak bir komut ekleyerek bu çözümü önizleyebiliriz :
#!/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"
Takma adlar genellikle bash komut dosyalarında çalışmaz, bu yüzden bunu shopt
düzeltmek için komuta ihtiyacımız vardır.
goto
'Nizi etkinleştirmek / devre dışı bırakmak istiyorsanız , biraz daha fazlasına ihtiyacımız var:
#!/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"
Sonra export DEBUG=TRUE
komut dosyasını çalıştırmadan önce yapabilirsiniz .
Etiketler yorumdur, bu nedenle goto
'lerimizi devre dışı bırakırsak sözdizimi hatalarına neden olmaz ( goto
' :
'no-op olarak ayarlayarak ), ancak bu, bunları goto
ifadelerimizde alıntılamamız gerektiği anlamına gelir .
Her türlü goto
çözümü kullanırken, geçmişte atladığınız kodun daha sonra güveneceğiniz herhangi bir değişken ayarlamamasına dikkat etmeniz gerekir - bu tanımları komut dosyanızın üstüne veya hemen üstüne taşımanız gerekebilir senin içinde goto
tablolar.
goto
bash'da yok (en azındancommand not found
benim için söylüyor). Neden? Muhtemelen bunu yapmanın daha iyi bir yolu vardır.