web-dev-qa-db-ja.com

コマンドライン引数をエイリアス関数に渡すためのfishとbashの違いは?

私の他の質問への回答から 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の違いはありますか?

7
NES

この2番目のコマンドは、実際には小さなbashスクリプトです。 Bashは、シェルに組み込まれているプログラミング言語です。ここで見るように、他のシェルで使用されますが、必ずしもそうではありません。

Fishはbashとはまったく異なるプログラミング言語を定義していますが、通常のalias name=command形式のsimpleエイリアスをサポートしています。代わりに関数を定義する必要があります。これは、魚で上記の関数を定義する方法です。

stefano@lenovo ~> function lsp
                      ls -ah --color=always $argv | less -R
                  end

funcsave lspので、永久に保存します。

これで、lsplsp -Rlsp *.png*などの期待されるコマンドを実行できます。

「sh」プログラムを使用して、bashを「起動」してスクリプトを実行することもできます(正確には「dash」を実行します)。しかし、魚を使用している場合、それが提供する方法を使用する可能性があります。私はそれを初めてテストしたばかりで、今のところ非常に感銘を受けました。

関数は、ホームディレクトリの.config/fish/functions/にファイルとして保存されます。この例では、ファイル名はlsp.fishになります。ファイルを編集して、後でfishを再起動するか、単に関数を定義して再度保存することができます。

魚を学ぶ最良の方法は、組み込みのヘルプを読むことです。魚の中から、入力するだけ

help

非常にきれいにフォーマットされた、広範囲で読みやすいマニュアルを入手できます。実際、これはw3m Webブラウザーを開きます。これは、ヘルプがhtml形式であるためです。

alt text

(q-yを押して終了します)

9
Stefano Palazzo

私はこれまでこのような仕掛けを見たことがありません。

alias lsp='_(){ ls -ah --color=always $* | less -R; }; _'

関数を宣言して実行するエイリアス。そもそも関数を作成するだけです。 bashでは、関数はほぼすべての方法でエイリアスに優先します。

lsp() { ls -ah --color=always "$@" | less -R; }

それを~/.bashrcファイルに入れるか、関数を~/.bash_functionsのような別のファイルに入れたい場合は、それを行うことができますが、そのファイルを~/.bashrcからsourceする必要があります

2
geirha