再割り当てコマンド

再割り当てコマンド

以前は、stderrに文字列をエコーするBashスクリプトフラグメントを見つけました。

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

どうしたの?(tmux内でzshを実行しています)

答え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エディタが開きます。

関連情報