私の他の質問への回答から here 私はコマンドライン引数をBashのエイリアス関数に渡す可能性について学びました。
Fishでは、~/.config/fish
ディレクトリのファイルconfig.fishを編集し、次のような行を追加することでエイリアスを編集できます。
alias lsp='ls -ah --color=always | less -R;'
完璧に機能します。これは、bashで~/.bash_aliases
を編集するのと同じです
しかし、このような引数を渡すエイリアス関数を設定しようとすると
alias lsp='_(){ ls -ah --color=always $* | less -R; }; _'
魚には効かない?
この2番目のエイリアスがbashの代わりにfishで動作することを防ぐコマンドライン引数を渡すエイリアスを設定する方法に、fishとbashの違いはありますか?
この2番目のコマンドは、実際には小さなbashスクリプトです。 Bashは、シェルに組み込まれているプログラミング言語です。ここで見るように、他のシェルで使用されますが、必ずしもそうではありません。
Fishはbashとはまったく異なるプログラミング言語を定義していますが、通常のalias name=command
形式のsimpleエイリアスをサポートしています。代わりに関数を定義する必要があります。これは、魚で上記の関数を定義する方法です。
stefano@lenovo ~> function lsp
ls -ah --color=always $argv | less -R
end
funcsave lsp
ので、永久に保存します。
これで、lsp
、lsp -R
、lsp *.png*
などの期待されるコマンドを実行できます。
「sh」プログラムを使用して、bashを「起動」してスクリプトを実行することもできます(正確には「dash」を実行します)。しかし、魚を使用している場合、それが提供する方法を使用する可能性があります。私はそれを初めてテストしたばかりで、今のところ非常に感銘を受けました。
関数は、ホームディレクトリの.config/fish/functions/
にファイルとして保存されます。この例では、ファイル名はlsp.fish
になります。ファイルを編集して、後でfishを再起動するか、単に関数を定義して再度保存することができます。
魚を学ぶ最良の方法は、組み込みのヘルプを読むことです。魚の中から、入力するだけ
help
非常にきれいにフォーマットされた、広範囲で読みやすいマニュアルを入手できます。実際、これはw3m
Webブラウザーを開きます。これは、ヘルプがhtml形式であるためです。
(q-yを押して終了します)
私はこれまでこのような仕掛けを見たことがありません。
alias lsp='_(){ ls -ah --color=always $* | less -R; }; _'
関数を宣言して実行するエイリアス。そもそも関数を作成するだけです。 bashでは、関数はほぼすべての方法でエイリアスに優先します。
lsp() { ls -ah --color=always "$@" | less -R; }
それを~/.bashrc
ファイルに入れるか、関数を~/.bash_functions
のような別のファイルに入れたい場合は、それを行うことができますが、そのファイルを~/.bashrc
からsource
する必要があります