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, gototakma 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 shoptdü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=TRUEkomut 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ı gotoifadelerimizde 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 gototablolar.
gotobash'da yok (en azındancommand not foundbenim için söylüyor). Neden? Muhtemelen bunu yapmanın daha iyi bir yolu vardır.