Как выполнить скрипт bash построчно?
Если я ввожу bash-x вариант, он покажет всю линию. Но скрипт будет выполняться нормально.
Как я могу выполнить построчно? Чем я могу видеть, если он делает правильную вещь, или я прерываю и исправляю ошибку. Тот же эффект поставить read
в каждой строчке.
5 ответов:
вам не нужно вставлять чтение в каждую строку, просто добавьте ловушку, как показано ниже, в ваш сценарий bash, он имеет эффект, который вы хотите, например.
#!/usr/bin/env bash set -x trap read debug < YOUR CODE HERE >
работает, просто протестировал его с bash v4.2.8 и v3.2.25.
УЛУЧШЕННАЯ ВЕРСИЯ
Если ваш скрипт читает содержимое из файлов, перечисленных выше, не будет работать. Обходной путь может выглядеть следующим образом.
#!/usr/bin/env bash echo "Press CTRL+C to proceed." trap "pkill -f 'sleep 1h'" INT trap "set +x ; sleep 1h ; set -x" DEBUG < YOUR CODE HERE >
чтобы остановить скрипт вам придется убить его из другой оболочки в этом случае.
ALTERNATIVE1
Если вы просто хотите подождать несколько секунд, прежде чем перейти к следующей команде в вашем скрипте следующий пример может работать для вас.
#!/usr/bin/env bash trap "set +x; sleep 5; set -x" DEBUG < YOUR CODE HERE >
я добавляю set +x и set-x в команде trap, чтобы сделать вывод более читаемым.
может быть BASH Debugger что-то для вас.
Если ваш сценарий bash действительно представляет собой набор команд one off, которые вы хотите запускать по одному, вы можете сделать что-то вроде этого, которое запускает каждую команду по одному при увеличении переменной
LN
, соответствующий номеру строки, которую вы хотите запустить. Это позволяет вам просто запустить последнюю команду снова очень легко, а затем вы просто увеличиваете переменную, чтобы перейти к следующей команде.предполагая, что ваши команды находятся в файле "it.sh", выполните следующее, по одному один.
$ cat it.sh echo "hi there" date ls -la /etc/passwd $ $(LN=1 && cat it.sh | head -n$LN | tail -n1) "hi there" $ $(LN=2 && cat it.sh | head -n$LN | tail -n1) Wed Feb 28 10:58:52 AST 2018 $ $(LN=3 && cat it.sh | head -n$LN | tail -n1) -rw-r--r-- 1 root wheel 6774 Oct 2 21:29 /etc/passwd
посмотреть bash-stepping-xtrace.
Это позволяет шагать xtrace.