Bất kỳ cách nào để hiển thị từng bước trong quá trình xử lý lệnh?


7

set -xchỉ 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.

nhập mô tả hình ảnh ở đây


Chạy bashtrong một trình sửa lỗi?
Satō Katsura

Tôi không chắc liệu điều này có phù hợp với mong muốn của bạn không: google.se/search?q=bashdb+debugger
Hannu

Làm thế nào để bạn chạy tập lệnh? Bạn đã thử chạy nó như thế này? bash -x script_name.sh arg1 arg2?
Rabin

Câu trả lời:


2

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 DEBUGmacro được xác định 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 bashnà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 đó.


-2

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)


1
Câu hỏi là hỏi cụ thể về bash, không phải thực thi tùy ý.
jayhendren
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.