Команда переназначена

Раньше я обнаружил фрагмент сценария Bash, с помощью которого можно передать строку в stderr:

echoerr() { echo "$@" 1>&2; } echoerr hello world 

Это осталось в моем буфере обмена, и когда я захотел отредактировать файл (с VIM), я случайно вставил этот фрагмент снова вместо имени файла:

 vim echoerr() { echo "$@" 1>&2; } echoerr hello world 

Кажется, что он переименовал echoerr в vim :

 $ where vim vim () { echo "$@" 1>&2; } /usr/bin/vim 

Кроме того, попытка открыть файл с VIM теперь просто возвращает имя файла обратно:

 vim path/to/some-file 

Печать:

 path/to/some-file 

Что случилось? (Я запускаю zsh внутри tmux)

  • применить темы zsh вручную
  • Переопределяемые функции в Zsh
  • Как настроить zsh, чтобы он объяснил мне, где я могу получить исполняемый файл вместо того, чтобы сказать, что файл не найден?
  • Двойная и тройная замена в bash и zsh
  • Как сортировать имена файлов с пробелами в них и объединять файлы?
  • Элегантный способ предотвратить замену команд от удаления конечной строки новой строки
  • zsh, модульность, несколько файлов .zsh и oh-my-zsh
  • Временное сохранение вывода команд оболочки в tmpfs
  • 2 Solutions collect form web for “Команда переназначена”

    Поскольку zsh позволяет вам определить функцию с несколькими именами. От man zshmisc :

     function word ... [ () ] [ term ] { list } word ... () [ term ] { list } word ... () [ term ] command where term is one or more newline or ;. Define a function which is referenced by any one of word. Normally, only one word is provided; multiple words are usually only useful for setting traps. The body of the function is the list between the { and }. See the section `Functions'. 

    Вам удалось создать функцию vim() . Это возможно, потому что zsh позволяет вам создать одну функцию с несколькими именами одновременно

     % vim dud() { echo ran dud function } % dud ran dud function % vim path/to/some-file ran dud function 

    Обратите внимание, как vim() и dud() оба установлены как функции.

    Вы можете убить ошибочного, отключив функцию def для него так:

     % unset -f vim 

    Теперь vim path/to/some-file должен открыть ваш редактор.

    Linux и Unix - лучшая ОС в мире.