set -x
chỉ hiển thị một kết quả cuối cùng của lệnh. Bất kỳ cách nào để xem từng bước rõ ràng hơn, như bức ảnh dưới đây.
bash -x script_name.sh arg1 arg2
?
set -x
chỉ hiển thị một kết quả cuối cùng của lệnh. Bất kỳ cách nào để xem từng bước rõ ràng hơn, như bức ảnh dưới đây.
bash -x script_name.sh arg1 arg2
?
Câu trả lời:
Có vẻ như bạn muốn có một trình quét cú pháp shell và trình phân tích cú pháp để tạo ra các mã thông báo được tìm thấy và các hành động cần thiết trong quá trình thực thi lệnh thực tế.
Tôi không biết bất kỳ shell nào thực hiện điều này vì nó sẽ làm chậm quá trình xử lý cũng như tạo ra một lượng đầu ra khổng lồ cho mỗi lệnh thậm chí hơi phức tạp.
Với bash
, nếu bạn tự biên dịch shell với DEBUG
macro được xác định và nếu bạn bật tất cả các cuộc gọi được nhận xét đến itrace()
hàm trong mã nguồn của shell 1 , thì bạn có thể nhận được một chút về những gì bạn muốn xem:
bash-4.4$ if [[ "$BASHPID" = 10 ]] && [[ "$USER" = myself ]]; then echo hello me; fi
TRACE: pid 22914: parse_matched_pair[9]: open = " close = " flags = 0
TRACE: pid 22914: parse_matched_pair[9]: returning $BASHPID"
TRACE: pid 22914: parse_matched_pair[9]: open = " close = " flags = 0
TRACE: pid 22914: parse_matched_pair[9]: returning $USER"
TRACE: pid 22914: param_expand: `$BASHPID' pflags = 0
Tại đây, bạn có thể thấy trình phân tích cú pháp xuất ra một vài câu lệnh gỡ lỗi về việc tìm mở và đóng dấu ngoặc kép và biến shell. Sau đó, một bước xử lý khác thông báo cho chúng tôi rằng việc mở rộng tham số $BASHPID
được thực hiện, nhưng xa tất cả các bước được liệt kê.
Kiểu đầu ra gỡ lỗi bash
này hữu ích hơn cho những người thực sự liên quan đến việc viết và sửa đổi mã nguồn của shell, và chắc chắn không nhằm mục đích hiểu cách phân tích cú pháp shell và giải thích đầu vào của shell.
Để làm quen với cách cú pháp và ngữ pháp của shell hoạt động, tôi khuyên bạn nên bắt đầu từ định nghĩa POSIX về ngữ pháp của shell (khá phức tạp và ít nhiều vô nghĩa đối với bất kỳ ai không thể đọc EBNF ).
1 Ngoại trừ một trong lib/glob/glob.c
đó có lỗi cú pháp trong đó.
set -x
là cho bash shell script, nó sẽ không hoạt động đối với các tệp nhị phân.
Nếu bạn muốn theo dõi một thực thi nhị phân, bạn nên xem xét một trình gỡ lỗi (ví dụ gdb
)
bash
trong một trình sửa lỗi?