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?
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?
Câu trả lời:
Đ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.
$!. Chỉ cần !không được mở rộng để bất cứ điều gì theo mặc định bởi bash.
$, như được giải thích trong hướng dẫn tham khảo Bash. Có lẽ phần đó không rõ ràng.
!(myfile)? Hoặc là... ?