Как выполнить скрипт bash построчно?


Если я ввожу bash-x вариант, он покажет всю линию. Но скрипт будет выполняться нормально.

Как я могу выполнить построчно? Чем я могу видеть, если он делает правильную вещь, или я прерываю и исправляю ошибку. Тот же эффект поставить read в каждой строчке.

5 68

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.

xargs: можно фильтровать строки

cat .bashrc | xargs -0 -l -d \n bash
  • -0 рассматривать в качестве сырья (без исключения)
  • - L отделить каждую строку (не по умолчанию для выступлений)
  • -д \\N строка разделитель