Câu trả lời:
bash -x script
hoặc là
set -x
trong kịch bản.
Bạn có thể hủy đặt lại tùy chọn với set +x
. Nếu bạn chỉ muốn làm điều đó cho một vài lệnh, bạn có thể sử dụng một lớp con: `(set -x; lệnh1; lệnh; ...;)
PS4
bạn có thể điều chỉnh lời nhắc của -x
. Ví dụ: PS4='Line $LINENO @ $(date +%s.%N): ' bash -x script
( date
sẽ làm chậm nó xuống)
Đây cũng là công việc:
set -v
hoặc là
#!/bin/bash -v
Nhưng -v không in chuỗi PS4 trước mỗi dòng script và nó không theo dõi các bước của câu lệnh "for" (ví dụ). Nó không lặp lại bình luận trong khi -x thì không.
Đây là một ví dụ về đầu ra sử dụng -v:
#!/bin/bash -v
# this is a comment
for i in {1..4}
do
echo -n $i
done
1234echo
echo hello
hello
Đây là kết quả của cùng một tập lệnh với -x:
+ for i in '{1..4}'
+ echo -n 1
1+ for i in '{1..4}'
+ echo -n 2
2+ for i in '{1..4}'
+ echo -n 3
3+ for i in '{1..4}'
+ echo -n 4
4+ echo
+ echo hello
hello
Lưu ý rằng tôi đã bao gồm "echo -n" để thêm điểm nhấn cho sự khác biệt giữa -v và -x. Ngoài ra, -v giống như "-o verbose", nhưng cái sau dường như không hoạt động như một phần của shebang.
Có một số cách.
#!/usr/bin/env bash -x
như dòng shebang.
Bao gồm set -x
trong chính kịch bản sẽ kích hoạt chức năng trong khi set +x
sẽ vô hiệu hóa nó. Cả hai phương pháp này cũng sẽ hoạt động với vỏ sh di động hơn.
Nếu tôi nhớ chính xác thì perl cũng có tùy chọn -x.
đi như
language -x script
ngôn ngữ = python, perl, bash -x = toán tử script = tên tệp
hy vọng nó giúp.
-x
không có gì để lặp lại trong Python
set
tùy chọn là gì, bạn có thể tìm thấy chúng trên trang người đàn ông này .