2

ではfish、同じ名前の別の関数内で関数を参照または使用できますか? たとえば、 には、 OS などに基づいていくつかのデフォルト パラメータを設定したり、シェルに色があるかどうかを設定fishする関数lsatがあります。/usr/local/share/functions/ls.fish新しいバージョンのfish.

エイリアスを設定する最も簡単な方法はcommand、次のように使用することです。

function ls
    command ls -F $argv
end

ls.fishフォルダ内のファイルで~/.config/fish/functions。これは、ユーザー定義関数の既定のフォルダーです。このフォルダと の両方~/.config/fish/functionsが にありますが$fish_function_path、後で来るので、ユーザーはのデフォルト機能~/.config/fish/functionsをオーバーライドする独自の機能を設定できます。fishただし、fishドキュメントに記載されているように、

command forces the shell to execute the program COMMANDNAME and ignore
any functions or builtins with the same name.

$fish_function_path上書きせずに、エイリアス/関数を後で定義したエイリアス/関数で上書きするにはどうすればよいですか? 理想的には、解決策は のような同じ名前の組み込みコマンドも使用しますcd。引用されたドキュメントによると、これも不可能ですが、これは必須ではありません。

最後に、これは良い考えですか?fishがデフォルトでこれを行わない場合、何らかの理由があるはずですよね?

4

1 に答える 1

4

通常のトリックは、オーバーライドする関数をコピーしてから、オーバーライド内からコピーを呼び出すことです。

functions --copy ls saved_ls
function ls
    saved_ls
end

無限ループが発生するため、自動ls.fish読み込みファイルでこれを行うことはできませんが、config.fish.

于 2015-06-21T03:56:51.870 に答える