Để gỡ lỗi tập lệnh bash, bạn có một số tùy chọn và một số trong số này thậm chí còn hiệu quả hơn chuyển hướng thiết bị xuất chuẩn/thiết bị xuất chuẩn.
Bạn có thể thêm vào của bạn ~/.bash_profile
(chỉ tạo dấu vết cho các phần cụ thể trong tập lệnh của bạn) với
set -x # kích hoạt gỡ lỗi từ đây
<lệnh>
đặt +x # ngừng gỡ lỗi từ đây
Cũng thế, đặt -v
in các dòng đầu vào shell khi chúng được đọc và đặt +v
vô hiệu hóa điều này.
Chỉ với điều này, bạn có thể sẽ nắm bắt được vấn đề.
chuyển hướng dấu vết
Sử dụng Biến Bash BASH_XTRACEFD
Nếu được đặt thành một số nguyên tương ứng với bộ mô tả tệp hợp lệ, Bash sẽ ghi đầu ra theo dõi được tạo khi âset -xâ được bật cho bộ mô tả tệp đó. Điều này cho phép đầu ra theo dõi được tách biệt khỏi các thông báo lỗi và chẩn đoán. Bộ mô tả tệp bị đóng khi BASH_XTRACEFD không được đặt hoặc được gán một giá trị mới. Việc bỏ đặt BASH_XTRACEFD hoặc gán chuỗi trống cho nó sẽ khiến đầu ra dấu vết được gửi tới lỗi tiêu chuẩn. Lưu ý rằng việc đặt BASH_XTRACEFD thành 2 (bộ mô tả tệp lỗi tiêu chuẩn) và sau đó bỏ đặt nó sẽ dẫn đến lỗi tiêu chuẩn bị đóng.
Vì vậy, bạn sẽ sử dụng
exec 5> ~/bash_profile_ouput.txt
BASH_XTRACEFD="5"
<lệnh>
bỏ đặt BASH_XTRACEFD
In số dòng
Sử dụng Biến Bash DÒNG KHÔNG
(và BASH_LINEKHÔNG
, BASH_SOURCE
và/hoặc TÊN CHỨC NĂNG
trong các trường hợp phức tạp hơn)
echo "Đang thực thi ${LINENO}"
<lệnh>
Chuyển hướng stdout/stderr
Phối hợp chỉ huy giám đốc điều hành
với chuyển hướng, và có thể phát bóng
.
Xem câu trả lời đây, cũng bao gồm các phương pháp/"thủ thuật" khác ngoài việc sử dụng giám đốc điều hành
.
Có liên quan:
- https://stackoverflow.com/questions/44249890/pipe-bash-stdout-only-in-debug-mode
- https://unix.stackexchange.com/questions/334382/find-out-what-scripts-are- being-run-by-bash-on-startup
- https://unix.stackexchange.com/questions/155551/how-to-debug-a-bash-script