2016-02-24 3 views
0

У меня возникла проблема с настройкой простой функции в ZSH.Обработка "?" символ передан функции ZSH

Я хочу сделать функцию, которая загружает только mp3-файл с youtube.

Я использовал YouTube-DL и я хочу сделать простую функцию, чтобы сделать это легко для меня

ytmp3(){ 
    youtube-dl -x --audio-format mp3 "[email protected]"} 

Так что, когда я пытаюсь

ytmp3 https://www.youtube.com/watch?v=_DiEbmg3lU8 

я получить

zsh: no matches found: https://www.youtube.com/watch?v=_DiEbmg3lU8 

но если я попробую

ytmp3 "https://www.youtube.com/watch?v=_DiEbmg3lU8" 

Это работает. Я понял, что программа запускает (но не скачивает ничего), если я удалю все символы после? включая его. Поэтому я предполагаю, что это какой-то особый характер для zsh.

ответ

0

Значок вопроса является частью соответствия шаблону ZSH, аналогично *. Это означает «Любой персонаж».

Например, ls c?nfig перечисляет как «конфиг», так и «cinfig» при условии, что они существуют.

Итак, ваша проблема в том, что zsh пытается интерпретировать? в URL-адресе в качестве шаблона для соответствия файлам, не найти их и вырезать. Побег? с \ или поставить кавычки вокруг него, как и вы, чтобы исправить это.

+0

Я нашел своего рода путь вокруг Я создал сценарий, который открывает интерпретатор оболочки bash, и я просто разбираю целую ссылку. Это своего рода связанная функция bash. Спасибо за ответ! (я не могу повысить свою репутацию до минимума) – penumbra

0

По умолчанию ZSH попытается использовать шаблоны «glob», которые вы используете в командной строке (он будет пытаться сопоставить шаблон с именами файлов). Если он не может сделать матч, вы получите ошибку, которую вы получаете («совпадений не найдено»).

Вы можете отключить этот режим путем отключения nomatch опции:

unsetopt nomatch 

Страница руководства описывает эту опцию следующим образом (она описывает то, что происходит, когда опция включена):

Если шаблон для генерации имени файла не имеет совпадений, напечатайте ошибку, а не оставите ее без изменений в списке аргументов.

Попробуйте снова с выключенной опцией:

$ unsetopt nomatch 
$ ytmp3 https://www.youtube.com/watch?v=_DiEbmg3lU8 

Если вы хотите навсегда отключить опцию, вы можете добавить отключает команду в файл ~/.zshrc.

 Смежные вопросы

  • Нет связанных вопросов^_^