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

Раньше я обнаружил фрагмент сценария 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)

  • Выход из терминала «nohup ./my_script &» => «У вас есть рабочие задания». ОК, чтобы выйти?
  • Как удалить zsh keybinding, если я не знаю, что он делает?
  • zsh globbing - поиск файлов с повторяющимися строками имен файлов
  • Портативный способ получить абсолютный путь скрипта?
  • Byobu - Новое окно с той же сессией ssh?
  • Выберите текст в терминале urxvt с помощью Shift + Arrow или Ctrl + Shift + Arrow
  • zsh !! и! $ auto выполняется так же, как и в bash
  • О взаимосвязи между инициализацией оболочки и настольными приложениями после «графического входа»
  • 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 - лучшая ОС в мире.