Ответ 1
Вы можете установить переменную PS4
для вывода set -x
для включения номера строки:
PS4=':${LINENO}+'
set -x
Это поместит номер строки перед каждой строкой по мере ее выполнения:
:4+command here
:5+other command
Очень важно иметь некоторый символ сигилы (например, +
в моих примерах) после разложений переменных в PS4
, потому что последний символ повторяется, чтобы показать глубину вложенности. То есть, если вы вызываете функцию, и эта функция вызывает команду, вывод из set -x
будет сообщать об этом так:
:3+++command run within a function called from a function
:8++command run within a function
:19+line after the function was called
Если для запуска script задействовано несколько файлов, вы можете включить переменную BASH_SOURCE
, а не только LINENO
(при условии, что это действительно есть bash script, а не /bin/sh
- убедитесь, что ваш script начинается с #!/bin/bash
!):
PS4=':${BASH_SOURCE}:${LINENO}+'
set -x