ZSH ile Apt-get * joker karakteri


15

ZSH:

sudo apt-get remove --purge ubuntuone-* 
ERROR: zsh: no matches found: ubuntuone-*

Bash üzerinde çalışıyor. Sorun ne ? :-D

Yanıtlar:


14

Evet zshve bashbu konuda farklı davranıyorlar.

İçinde zsh" ubuntuone-*" dediğinizde , şu anki çalışma dizininizde ile başlayan dosyaları arar ubuntuone-- hiçbiri bulamadığı için " no matches" der ve komutu çalıştırmaz.

bashfarklı bir çakışma alır - aynı zamanda ubuntuone-geçerli çalışma dizininde başlayan dosyaları arar , ancak herhangi bir şey bulamazsa kendi kendine "Belki çağırdığım program joker karakterin nasıl işleneceğini bilir" ve böylece geçer " ubuntuone-*" sudo apt-getgerçek bir argüman olarak.

Geçerli çalışma dizininizde şu ubuntuone-ffdjhjeradla adlandırılmış bir dosya varsa , bash yürütmeye çalışır ve sudo apt-get remove --purge ubuntuone-ffdjhjerbu muhtemelen başarısız olur.

İçinde zsh(ve içinde bash), joker karakteri genişletmemesini değil, onu iletmesini bildirmek için tek tırnak işaretleri kullanabilirsiniz:

sudo apt-get remove --purge 'ubuntuone-*'

2
Zsh'ın Bash gibi davranmasını bu şekilde yapabilir miyim?
mirandalol

Bilmiyorum, ancak şu ana kadar yaptığım biraz araştırma hayır demek. Her durumda, kabuğun joker karakterleri genişletmesini istemiyorsanız, bağımsız değişkenleri tek tırnak işaretleri içine almak her zaman daha iyidir (çünkü bash'ta bile komut CWD'deki bir dosya istediğinizi yapmaz joker karakterle eşleşir. Örneğin her zaman dpkg -l 'linux*'kurulu tüm çekirdekleri görmek için bash yazıyorum .
David Purdue

10

Bu cevabı biraz geç olabilir, ama bunu düzeltmenin bir yolu var. Komut satırından yürütme:

unsetopt no_match

bu harika çalışıyor
neaumusic

Veya shopt -s failglobiçinde bashhiç düzeltme bash bunun gibi davranır böylece zshve diğer modern kabuklar gibi fishveya tcsh o giderdiğinizi globs eşleşmedi bile bir komut hala çalıştırmak olabilir sayede Bourne kabuğunun misfeature.
Stéphane Chazelas

StéphaneChazelas yoda
OpenCoderX

1

Ben tırnak üzerinde tercih zsh genişlemesini önlemek için başka bir yolu vardır:

sudo apt-get remove --purge ubuntuone-\*
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.