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

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

Ранее я нашел фрагмент скрипта 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)

решение1

Поскольку 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'.

решение2

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

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

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

Вы можете удалить ошибочную функцию, отменив для нее определение функции следующим образом:

% unset -f vim

Теперь vim path/to/some-fileвам следует открыть свой редактор.

Связанный контент