Якщо ви тестуєте / налагоджуєте баш-скрипт і просто хочете пропустити вперед один або кілька розділів коду, ось дуже простий спосіб зробити це, який також дуже легко знайти та видалити пізніше (на відміну від більшості методів описано вище).
#!/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"
Щоб повернути свій сценарій до нормального, просто видаліть будь-які рядки GOTO
.
Ми також можемо доопрацювати це рішення, додавши goto
команду як псевдонім:
#!/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"
Псевдоніми зазвичай не працюють у скриптах bash, тому нам потрібна shopt
команда, щоб виправити це.
Якщо ви хочете мати можливість увімкнути / вимкнути свої goto
, нам потрібно трохи більше:
#!/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"
Тоді ви можете зробити export DEBUG=TRUE
перед запуском сценарію.
Мітки є коментарями, тому не викличуть синтаксичних помилок, якщо вимкнути наші goto
(встановивши goto
на " :
" неоперативний), але це означає, що нам потрібно цитувати їх у своїх goto
висловлюваннях.
Кожного разу, коли ви використовуєте будь-яке goto
рішення, вам слід бути обережними, щоб код, який ви пропускаєте повз, не встановлював змінних, на які ви покладаєтесь пізніше - можливо, вам знадобиться перемістити ці визначення вгору вашого сценарію або трохи вище одного ваших goto
заяв.
goto
в баші (принаймні, це говоритьcommand not found
для мене). Чому? Ймовірно, є кращий спосіб це зробити.