Apt-get * подстановочный знак с ZSH

ZSH:

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

Работает на Bash. В чем проблема ? :-D

15
задан 21 August 2013 в 09:04

3 ответа

Да, zsh и bash ведут себя по-разному в этом отношении.

В zsh, когда вы говорите «ubuntuone-*», он ищет в вашем текущем рабочем каталоге файлы, которые начинаются с ubuntuone- - поскольку он не находит, он говорит «no matches» и не запускается команда.

bash берет другую тактику - он также ищет файлы, которые начинаются с ubuntuone- в текущем рабочем каталоге, но если он не находит ничего, он говорит себе: «Возможно, вызываемая мной программа знает, как обрабатывать подстановочный знак «и так передает» ubuntuone-* »в sudo apt-get в качестве буквального аргумента.

Если у вас в текущем рабочем каталоге есть файл с именем ubuntuone-ffdjhjer, то bash попытается выполнить sudo apt-get remove --purge ubuntuone-ffdjhjer, что, вероятно, завершится ошибкой.

В zsh (и в bash) вы можете использовать одинарные кавычки, чтобы указывать не расширять подстановочный знак, а передавать его, как в:

sudo apt-get remove --purge 'ubuntuone-*'
0
ответ дан 21 August 2013 в 09:04

Есть еще один способ предотвратить расширение в zsh, который я предпочитаю над кавычками:

sudo apt-get remove --purge ubuntuone-\*
0
ответ дан 21 August 2013 в 09:04

Может быть, немного поздно, этот ответ, но есть способ это исправить. Из командной строки выполните:

unsetopt no_match
0
ответ дан 21 August 2013 в 09:04

Другие вопросы по тегам:

Похожие вопросы: