2012-04-11 29 views
15

Tôi thấy một khách hàng đang thực hiện lệnh $bash -x để xem tệp có thể thực thi (hoặc lệnh ksh -x, v.v.) như số -x trong câu lệnh if trong tập lệnh trình bao.lệnh bash -x

Câu hỏi của tôi là: Lệnh $bash -x làm gì?

Cách diễn giải của tôi là bắt đầu lệnh trong một bash shell mới trong shell hiện tại, kế thừa các biến môi trường giống nhau và được thực thi bởi cùng một người dùng.

Điều buồn cười là tôi có thể làm $ls nhưng không $bash -x ls, trong đó cung cấp:

(dưới AIX 6) /usr/bin/ls: /usr/bin/ls: cannot execute binary file

Đó là một bí ẩn đối với tôi lý do tại sao các lỗi được - đoán đó là do một đặc quyền có nghĩa là giả định của tôi ở trên là không chính xác.

Ngoài ra, tôi tin rằng $bash ls$bash -x ls là điều tương tự (-x cho "thực thi")?

Bất kỳ nhận xét nào được đánh giá cao.

Chúc mừng!

+5

để thực thi lệnh bash với chế độ gỡ lỗi (-x) được bật, sử dụng 'bash -x -c your_command' – Alex

+1

RTFM! j/k/10char – KurzedMetal

+0

Cảm ơn Alex vì câu trả lời ngắn gọn, bash -x -c ls làm những gì bạn mô tả. Vì vậy, "$ bash-x lệnh để xem nếu tập tin là thực thi" là WRONG sau đó :) Cảm ơn rất nhiều! – Khiet

Trả lời

29

Tùy chọn -x bắt đầu trình bao BASH ở chế độ gỡ lỗi. Bạn có thể xem tất cả các chi tiết về cách lệnh/script của bạn được xử lý. Đó là một cách hay để tìm một số lỗi nếu tập lệnh của bạn không làm những gì bạn mong đợi ở

Và giống như Alex đã nói trong nhận xét ở trên. Để chạy lệnh bằng BASH, bạn phải sử dụng tùy chọn -c như bash -x -c ls.

Xem man bash hoặc hướng dẫn trực tuyến, đặc biệt là các bộ phận trên invoking Bashthe set builtin command để biết thêm thông tin:

Tất cả các tùy chọn ký tự duy nhất sử dụng với các thiết lập được xây dựng trong (xem The Set Builtin) có thể được sử dụng như tùy chọn khi trình bao được gọi.

-x In một dấu vết các lệnh đơn giản, cho lệnh, lệnh trường hợp, lệnh chọn và số học cho lệnh và đối số của chúng hoặc danh sách từ liên quan sau khi chúng được mở rộng và trước khi chúng được thực hiện. Giá trị của biến PS4 được mở rộng và giá trị kết quả được in trước lệnh và các đối số mở rộng của nó.

+0

Cảm ơn Tomas, người đàn ông cho bash không được cài đặt trên máy ảo của chúng tôi, nhưng người đàn ông trang trực tuyến không thực sự nói tất cả; – Khiet

+0

@Khiet Bạn được chào đón.Nếu bạn không có người đàn ông được cài đặt, hãy gõ 'man bash' vào Google và liên kết đầu tiên thường là trang hướng dẫn sử dụng :) – user219882

+0

' bash | grep "\ -x" 'trả lại cho tôi 0 dòng ... nhưng nó hoạt động. –

0
  • bash -x <file> chạy kịch bản <file> với truy tìm của mỗi lệnh thực thi

  • kiểm tra liệu <file> đã thực hiện quyền cho người dùng hiện tại.

Dường như bạn đã bỏ qua hai điều này.