ZSH:
sudo apt-get remove --purge ubuntuone-*
ERROR: zsh: no matches found: ubuntuone-*
Hoạt động trên Bash. Có vấn đề gì vậy? : -D
ZSH:
sudo apt-get remove --purge ubuntuone-*
ERROR: zsh: no matches found: ubuntuone-*
Hoạt động trên Bash. Có vấn đề gì vậy? : -D
Câu trả lời:
Vâng, zsh
và bash
hành xử khác nhau trong vấn đề này.
Trong zsh
, khi bạn nói " ubuntuone-*
" nó sẽ tìm trong thư mục làm việc hiện tại của bạn cho các tệp bắt đầu bằng ubuntuone-
- vì nó không tìm thấy bất kỳ, nó nói " no matches
" và không chạy lệnh.
bash
có một chiến thuật khác - nó cũng tìm kiếm các tệp bắt đầu ubuntuone-
trong thư mục làm việc hiện tại, nhưng nếu nó không tìm thấy bất kỳ thứ gì nó tự nói, "Có thể chương trình tôi đang gọi biết cách xử lý ký tự đại diện" và cứ thế vượt qua " ubuntuone-*
"Tắt sudo apt-get
như một cuộc tranh luận theo nghĩa đen.
Nếu bạn có một tệp trong thư mục làm việc hiện tại của bạn được gọi ubuntuone-ffdjhjer
, thì bash sẽ cố thực thi sudo apt-get remove --purge ubuntuone-ffdjhjer
, có thể sẽ thất bại.
Trong zsh
(và trong bash
), bạn có thể sử dụng các dấu ngoặc đơn để nói với nó không phải để mở rộng ký tự đại diện mà để chuyển nó vào, như trong:
sudo apt-get remove --purge 'ubuntuone-*'
dpkg -l 'linux*'
bash để xem tất cả các kernel đã cài đặt.
Có thể hơi muộn câu trả lời này, nhưng có một cách để khắc phục điều này. Từ dòng lệnh thực thi:
unsetopt no_match
shopt -s failglob
trong bash
để sửa chữa bash
nên nó hoạt động như zsh
và vỏ hiện đại khác thích fish
hay tcsh
rằng đã sửa lỗi này misfeature của vỏ Bourne theo đó một lệnh vẫn có thể được chạy ngay cả khi những đống không phù hợp.