rm! (myfile) không hoạt động trên OS X?


1

Lệnh này hoạt động tốt trên Linux nhưng trên OS X Mountain Lion khi tôi đang thực hiện:

rm !(myfile)

Bash phàn nàn:

bash: !: event not found

Có cách nào để làm điều đó giống như trên OS X không?


Bạn đang cố gắng làm gì, xóa một tập tin có tên !(myfile)? Hoặc là... ?
Kyle Jones

Câu trả lời:


2

Điều này là do bạn chưa đặt extglobtùy chọn, điều này mang đến một ý nghĩa đặc biệt !.

Trong Bash của bạn, viết:

shopt -s extglob

Sau đó, lệnh sẽ chạy như mong đợi.

Theo mặc định, !mở rộng tới ID tiến trình của lệnh nền (không đồng bộ) được thực hiện gần đây nhất. Với extglobtập hợp, !có thể được sử dụng để khớp mẫu , nhưng chỉ kết hợp với dấu ngoặc đơn theo sau nó ().

Tất nhiên bạn có thể thêm dòng này vào ~/.bash_profileđể đặt nó bất cứ khi nào bạn mở Terminal.app. OS X theo mặc định chạy shell đăng nhập, vì vậy các tùy chọn này nên được đặt ~/.bash_profilevà không ~/.bashrcđược sử dụng từ trình giả lập thiết bị đầu cuối Linux.


"!" có ý nghĩa đặc biệt đối với lịch sử lệnh, extglob cho phép sử dụng nó để khớp mẫu âm có thể ghi đè lên đó. Lỗi quan sát được là do tính năng lịch sử (một sự khó chịu nhỏ là lệnh errant không được thêm vào lịch sử lệnh của bạn).
mr.spuratic

Các pid của quá trình nền cuối cùng là $!. Chỉ cần !không được mở rộng để bất cứ điều gì theo mặc định bởi bash.
Lri

@Lauri, vâng, kết hợp với $, như được giải thích trong hướng dẫn tham khảo Bash. Có lẽ phần đó không rõ ràng.
slhck
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.