先日、ls
コマンドをオーバーライドすることを目的として、シェル関数を試していました。意図はls
、最初のスイッチが「-y」の場合はシェルに最初に関数を呼び出させ、それ以外の場合は通常のを呼び出すこと/bin/ls
でしたが、結果は私が理解できない方法で動作します。
それを有効にするために、スイッチに「-y」を使用することにしました。
$ ls -y
ls: invalid option -- 'y'
Try `ls --help' for more information.
そのため、 のコア機能を壊すことはできませんls
。とにかく、問題を最も単純なものに減らし、問題を強調するのに役立つ他のいくつかの例を示します。
$ function ls() { [[ "y$1" == "y-y" ]] && echo LS ; }
$ function less() { [[ "y$1" == "y-y" ]] && echo LESS ; }
$ function try() { [[ "y$1" == "y-y" ]] && echo TRY ; }
だから私は をオーバーライドls
し、どれが「コントロール」標本のようなものかless
を定義しています:)try
今このように呼び出す:
$ ls ; less ; try
期待どおりに動作しますが (出力なし)、次のようになります。
$ ls -y ; less -y ; try -y
LESS
TRY
これはls
機能しless
ませんが、「コントロール」と同様にオーバーライドは機能します。
stackoverflow または askubuntu の他の場所 (ただし、参照を失ってしまいました)ls
は、ビルトインであることを暗示する例を見ましたが、次のとおりです。
$ which ls
/bin/ls
と:
$ builtin ls
bash: builtin: ls: not a shell builtin
したがって、私のシステムにはないようです(たとえあったとしても、なぜこのように動作するのか実際にはわかりません)。
なんの説明なのかしら。重要ではありませんが、何が起こっているのかを理解したいと思います。
ありがとう。