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

Если я войду в bash -x, он отобразит всю строку. Но script выполнит normaly.

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

Ответ 1

Вам не нужно вводить чтение в каждую строку, просто добавьте в свой bash script ловушку, как показано ниже, она имеет необходимый эффект, например.

#!/usr/bin/env bash
set -x
trap read debug

< YOUR CODE HERE >

Работает, просто протестировал его с помощью bash v4.2.8 и v3.2.25.


УЛУЧШЕННАЯ ВЕРСИЯ

Если ваш script читает содержимое из файлов, перечисленные выше не будут работать. Обходной путь может выглядеть следующим образом.

#!/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 >

Чтобы остановить script, вы должны убить его из другой оболочки в этом случае.


ALTERNATIVE1

Если вы просто хотите подождать несколько секунд, прежде чем перейти к следующей команде в script, следующий пример может работать для вас.

#!/usr/bin/env bash
trap "set +x; sleep 5; set -x" DEBUG

< YOUR CODE HERE >

Я добавляю set + x и устанавливаю -x в команде trap, чтобы сделать вывод более читаемым.

Ответ 2

Возможно, BASH Debugger - это что-то для вас.

Ответ 3

Посмотрите bash -stepping-xxtrace.

Он позволяет выполнять шаговое переключение.