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 extglob
tù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 extglob
tậ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_profile
và 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à... ?