Если я введу параметр bash -x , он покажет всю строку. Но сценарий будет нормально выполняться.
Как я могу выполнить построчно? Тогда я смогу увидеть, правильно ли он работает, или я прервусь и исправлю ошибку. Такой же эффект используется read
в каждой строке.
Ответы:
Вам не нужно помещать чтение в каждую строку, просто добавьте ловушку, подобную приведенной ниже, в свой сценарий 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 >
В этом случае, чтобы остановить скрипт, вам придется убить его из другой оболочки .
АЛЬТЕРНАТИВА1
Если вы просто хотите подождать несколько секунд, прежде чем переходить к следующей команде в сценарии, следующий пример может сработать для вас.
#!/usr/bin/env bash trap "set +x; sleep 5; set -x" DEBUG < YOUR CODE HERE >
Я добавляю set + x и set -x в команду trap, чтобы сделать вывод более читаемым.
источник
trap 'read -u1' debug
чтобы переопределить проблему перенаправления чтения файла.Может быть, отладчик BASH для вас.
источник
apt-get install bashdb
. Затем вам просто нужно запуститьbashdb your_command.sh
, ввестиstep
и после этого нажать возврат каретки.brew install bashdb
Если ваш сценарий bash на самом деле представляет собой набор разовых команд, которые вы хотите запускать одну за другой, вы можете сделать что-то вроде этого, который запускает каждую команду одну за другой, когда вы увеличиваете переменную
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: может фильтровать строки
источник