Kommando neu zugewiesen

Kommando neu zugewiesen

Ich habe vorhin einen Ausschnitt eines Bash-Skripts gefunden, mit dem man einen String an stderr zurückgeben kann:

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

Dies blieb in meiner Zwischenablage, und als ich eine Datei bearbeiten wollte (mit VIM), habe ich versehentlich anstelle des Dateinamens diesen Ausschnitt erneut eingefügt:

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

Es scheint neu zugewiesen worden zu sein echoerran vim:

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

Außerdem wird beim Versuch, eine Datei mit VIM zu öffnen, jetzt nur der Dateiname zurückgespiegelt:

vim path/to/some-file

Drucke:

path/to/some-file

Was ist passiert?(Ich führe zsh in tmux aus)

Antwort1

Weil zshSie Funktionen mit mehreren Namen definieren können. Von 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'.

Antwort2

Sie haben es geschafft, eine Funktion namens zu erstellen vim(). Dies ist möglich, weil Sie mit zsh eine einzelne Funktion mit mehreren Namen gleichzeitig erstellen können.

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

Beachten Sie, wie vim()und dud()beide als Funktionen festgelegt wurden.

Sie können das fehlerhafte Element beseitigen, indem Sie die Funktionsdefinition dafür wie folgt aufheben:

% unset -f vim

Jetzt vim path/to/some-filesollte Ihr Editor geöffnet werden.

verwandte Informationen