Tôi thường tương tác lặp qua ví dụ: các tệp của tôi và muốn thực hiện một hoạt động cụ thể trên tất cả chúng, giả sử tôi muốn đổi tên tất cả các tệp:Hiển thị các lệnh mà không cần thực hiện chúng
for file in $(ls); do mv "$file" "${file}_new"; done
Điều này làm việc tốt. Nhưng trước khi gọi lệnh này, tôi muốn xem những gì nó thực sự không có gì, vì vậy tôi sẽ thêm một tiếng vang trước
for file in $(ls); do echo mv "$file" "${file}_new"; done
sau đó nó chỉ cho tôi tất cả các lệnh nó sẽ gọi. Nếu tôi hài lòng với họ, tôi xóa echo
và thực hiện nó.
Tuy nhiên, khi các lệnh này tinh tế hơn một chút có thể bao gồm đường ống hoặc nhiều lệnh, điều này không hoạt động nữa. Tất nhiên tôi có thể sử dụng '
để các ký tự đặc biệt không được giải thích, nhưng sau đó tôi không có mở rộng tham số. Tôi cũng có thể thoát khỏi những nhân vật đặc biệt, nhưng điều này sẽ rất tẻ nhạt.
Câu hỏi của tôi là, cách tốt nhất để làm điều này là gì? Tôi đã đọc trong man bash
về tùy chọn -n
, có "Đọc lệnh nhưng không thực thi chúng. Điều này có thể được sử dụng để kiểm tra tập lệnh shell cho lỗi cú pháp. Điều này bị bỏ qua bởi các trình tương tác". Đây chính xác là những gì tôi cần, nhưng tôi cần nó cho một hệ vỏ tương tác. Lưu ý rằng các tùy chọn -x
hoặc -v
không giúp đỡ, vì nó sẽ không chỉ hiển thị lệnh, mà còn gọi nó và sau đó có thể đã quá trễ rồi.
Về mặt kỹ thuật, không có cách nào để đạt được điều đó. – devnull
Hoặc, bạn có thể * alias-empty * mỗi lệnh vào một cái gì đó như 'bí danh = 'bash -c" "'', để tham số được chấp nhận, nhưng không có gì được thực hiện. Bạn có thể chạy một vòng lặp * alias-emptifier *, thực thi tiến trình bạn muốn, và sau đó * alias-restore * các lệnh - phục hồi chức năng của chúng. –
Rubens
Bằng cách này, việc sử dụng 'cho tệp trong $ (ls) 'là hy sinh một đứa trẻ (quy trình) không có lý do chính đáng. Tại sao không sử dụng 'cho tập tin trong *'? – cdarke