魚のバージョン3.3.1 | |
| 原作者 | アクセル・リリエンクランツ |
|---|---|
| 開発者 | 魚殻開発者[1] |
| 初回リリース | 2005年2月13日 |
| 安定版リリース | 3.7.1 [2]
/ 2024年3月19日 |
| リポジトリ |
|
| 書かれた | さび |
| オペレーティング·システム | Unixライク |
| タイプ | Unixシェル |
| ライセンス | GPL-2.0のみ[3] |
| Webサイト | フィッシュシェル |
Fish(または小文字で表記するとフレンドリーインタラクティブシェル)は、インタラクティブ性と使いやすさを重視したUnixライクなシェルです。Fishは、高度な設定ではなく、デフォルトで豊富な機能を備えるように設計されています。[ 4] Fishは、メンテナーの裁量によりPOSIXシェル標準に準拠していないため、エキゾチックシェルと見なされています。[5]
特徴
Fish は、ユーザーが入力するにつれて、コマンド履歴と現在のディレクトリに基づいて増分候補を表示します。これはBashのCtrl+R履歴検索と同様に機能しますが、常にオンになっているため、コマンドを入力している間、ユーザーに継続的なフィードバックを提供します。Fish には、ファイル パスの拡張 (ワイルドカードと括弧の拡張を使用)、環境変数、およびコマンド固有の補完をサポートする機能豊富なタブ補完も含まれています。説明付きのオプションを含むコマンド固有の補完は、コマンドのマニュアル ページからある程度生成できますが、カスタム補完をソフトウェアに組み込んだり、シェルのユーザーが作成したりすることもできます。[6]
Fishの作者は、新しい機能を構文ではなくコマンドとして追加することを好みました。これにより、組み込み機能によりオプションとヘルプテキストを使用してコマンドを検索できるため、機能がより見つけやすくなりました。関数には、人間が読める説明を含めることもできます。特別なヘルプコマンドを使用すると、ユーザーのWebブラウザーですべてのfishドキュメントにアクセスできます。[7]
構文
構文はPOSIX互換シェル(Bashなど)に似ているが、多くの点で異なっている[8]
# 変数の割り当て
#
# 変数 'foo' を値 'bar' に設定します。
# fish は、本質的に空白を区別する = 演算子を使用しません。
# 'set' コマンドは、配列、スコープなどにも使用できるように拡張されています。
> foo バーを
設定> $fooをエコー
バー
# コマンド置換
#
# コマンド 'pwd' の出力を変数 'wd' に代入します。
# fish はバックティック (``) を使用しません。バックティックはネストできず、一重引用符 (' ') と混同される可能性があります。
> set wd ( pwd )
> set wd $( pwd ) # バージョン 3.4 以降
> echo $wd
〜
# 配列変数。'A' は 5 つの値を持つ配列になります:
> set A 3 5 7 9 12
# 配列のスライス。'B' は 'A' の最初の 2 つの要素になります:
> set B $A [ 1 2 ]
> echo $B
3 5
# 他の配列やコマンド
置換出力でインデックス付けすることもできます:
> echo $A [( seq 3 )]
3 5 7
# 'A' の 3 番目と 5 番目の要素を消去します
> set --erase A [ $B ]
> echo $A
3 5 9
# for ループ、jpeg を png に変換
> for i in *.jpg$i を (ベース名$i .jpg ) .png
に変換して終了
# fish は複数行の履歴と編集をサポートしています。
# セミコロンは改行のように機能します:
> for i in *.jpg ; convert $i ( basename $i .jpg ) .png ; end
# while ループで /etc/passwd の行を読み取り、
ファイルから 5 番目のコロンで区切られたフィールドを出力します。これが
ユーザーの説明になります。
> while read line
set arr ( echo $line | tr : \n )
echo $arr [ 5 ]
end < /etc/passwd
# 文字列の置換 (すべての i を I に置換)
> string replace -a "i" "I" "Wikipedia"
ウィキペディア
暗黙のサブシェルなし
パイプライン、関数、ループなどの一部の言語構造は、他のシェル言語のいわゆるサブシェルを使用して実装されています。サブシェルは、タスクを実行するためにいくつかのコマンドを実行し、その後親シェルに戻る子プログラムです。この実装の詳細には通常、変数の割り当てなど、サブシェルで行われた状態の変更がメインシェルに伝播しないという副作用があります。Fish は言語機能のためにサブシェルを作成することはありません。すべての組み込みは親シェル内で行われます。
# 他の多くのシェルでは、'read' ビルトインが
サブシェル内で実行されるため、これは機能しません。Bash では、パイプの右側に
副作用はありません。ksh では、以下のコマンドは機能しますが、
左側に副作用はありません。fish と zsh では、両側
に副作用があります。
> cat *.txt | read line
変数割り当ての例
この Bash の例は、見た目どおりには動作しません。ループ本体がサブシェルであるため、更新は$found永続的ではありません。
found = ''
cat /etc/fstab | while read dev mnt rest ; do if test " $mnt " = "/" ; then found = " $dev " fi done
回避策:
found = ''
while read dev mnt rest ; do if test " $mnt " = "/" ; then found = " $dev " fi done < /etc/fstab
魚の例:
見つかったものを設定''
cat /etc/fstab | while read dev mnt rest
if test " $mnt " = "/"
見つかったものを設定$dev
end
end
ユニバーサル変数
Fish にはユニバーサル変数と呼ばれる機能があり、ユーザーはこれを使用して、実行中のすべての fish シェルにわたって変数に永続的に値を割り当てることができます。変数の値はログアウトや再起動後も記憶され、更新は実行中のすべてのシェルに直ちに伝播されます。
# これにより、emacs がデフォルトのテキスト エディターになります。'--universal' (または '-U') は、
これをユニバーサル変数にするように fish に指示します。
> set --universal EDITOR emacs
# このコマンドは、実行中のすべての fish インスタンスで、fish
# プロンプトの現在の作業ディレクトリ部分を青色にします。
> set --universal fish_color_cwd blue
その他の機能
- 高度なタブ補完 (カスタム補完の記述をサポート)。
- 広範なエラー チェックによる構文の強調表示。
- X クリップボードのサポート。
- terminfoに基づいたスマートな端末処理。
- 検索可能なコマンド履歴。
- Web ベースの構成 (fish_config)。
Bash/fish 翻訳テーブル
参照
参考文献
- ^ 「fish shell チームメンバー」。GitHub.com 。 2021年7月28日閲覧。
- ^ “リリース 3.7.1”. 2024年3月19日. 2024年3月22日閲覧。
- ^ fishshell.com 魚のライセンス
- ^ Liljencrantz, Axel (2005-05-17). 「Fish - ユーザーフレンドリーなシェル」. Linux Weekly News . 2010-03-24閲覧。
- ^ 「Fish docs: design」. 2021年4月9日閲覧。
- ^ 「独自の補完を書く」。fish shell。2024年8月31日時点のオリジナルよりアーカイブ。
- ^ Linux.com. CLI マジック: fish でシェルを強化。2010 年 3 月 24 日閲覧。
- ^ Paul, Ryan (2005 年 12 月 19 日). 「fish の詳細な説明: 使いやすい対話型シェル」. Ars Technica . 2015 年3 月 10 日閲覧。Posix
構文には、変数のスコープ、配列、関数など、欠落している機能や実装が不適切な機能がいくつかあります。このため、fish はいくつかの重要な箇所で Posix 構文から外れています。
- ^ 「Bash の落とし穴」。2016 年 7 月 10 日取得。
このページでは、Bash プログラマーが犯す一般的なエラーを示します。(…) 常に引用符を使用し、いかなる理由があっても単語分割を使用しないようにすれば、これらの落とし穴の多くを避けることができます。単語分割は、Bourne シェルから継承された壊れたレガシーの誤った機能であり、展開を引用符で囲まない場合はデフォルトで有効になります。落とし穴の大部分は、引用符で囲まれていない展開と、その結果生じる単語分割とグロブに何らかの形で関連しています。
- ^ 「RFC: コマンド ラインでトークンを展開/評価するためのバインディングを追加する」。GitHub。2013-05-16。2021-04-09に取得。
- ^ 「printf は \e をサポートしていません」。fish issues。2013年 7 月 11 日。2016 年3 月 24 日閲覧。
外部リンク
- 公式サイト – ドキュメントとダウンロードを含む
- GitHub上の fish (アクティブ)
- Gitoriousの魚(旧式)
- SourceForgeの fish (廃止)
- Fish-users – 魚ユーザーのための一般的なディスカッションリスト
- シェル翻訳辞書 - 別の Bash/Fish 翻訳テーブル
