「Fish」の版間の差分
(未訳部分の翻訳) |
|||
26行目: | 26行目: | ||
=== リダイレクト === |
=== リダイレクト === |
||
+ | リダイレクトという仕組みを使うことでファイル記述子の出力先を他のファイルに変えることができます: |
||
− | Any file descriptor can be directed to other files through a mechanism called redirection: |
||
− | {{bc|'' |
+ | {{bc|''標準入力をリダイレクト:'' |
$ command < source_file |
$ command < source_file |
||
+ | ''標準出力をリダイレクト:'' |
||
− | ''Redirecting standard output:'' |
||
$ command > destination |
$ command > destination |
||
+ | ''既存のファイルに標準出力を追記:'' |
||
− | ''Appending standard output to an existing file:'' |
||
$ command >> destination |
$ command >> destination |
||
+ | ''標準エラーをリダイレクト:'' |
||
− | ''Redirecting standard error:'' |
||
$ command ^ destination |
$ command ^ destination |
||
+ | ''既存のファイルに標準エラーを追記:'' |
||
− | ''Appending standard error to an existing file:'' |
||
$ command ^^ destination}} |
$ command ^^ destination}} |
||
+ | {{ic|destination}} には以下のどれかを使えます: |
||
− | You can use one of the following as {{ic|destination}}: |
||
+ | * ファイル名 (出力は指定されたファイルに書き込まれます)。 |
||
− | * A filename (the output will be written to the specified file). |
||
+ | * {{ic|&}} と他のファイル記述子の番号。出力は他のファイル記述子に書き込まれます。 |
||
− | * An {{ic|&}} followed by the number of another file descriptor. The output will be written to the other file descriptor. |
||
− | * |
+ | * {{ic|&}} と {{ic|-}} 記号。出力はどこにも書き込まれません。 |
+ | 例: |
||
− | Examples: |
||
+ | {{bc|''標準出力をファイルにリダイレクト:'' |
||
− | {{bc|''Redirecting standard output to a file:'' |
||
$ command > destination_file.txt |
$ command > destination_file.txt |
||
+ | ''標準出力と標準出力の両方を同じファイルにリダイレクト:'' |
||
− | ''Redirecting both standard output and standard error to the same file:'' |
||
$ command > destination_file.txt ^ &1 |
$ command > destination_file.txt ^ &1 |
||
+ | ''標準出力を消す:'' |
||
− | ''Silencing standard output:'' |
||
$ command > &-}} |
$ command > &-}} |
||
=== パイプ === |
=== パイプ === |
||
+ | あるコマンドの標準出力を次のコマンドの標準入力にリダイレクトすることができます。パイプ文字 ({{ic|<nowiki>|</nowiki>}}) を使ってコマンドを区切って下さい。例: |
||
− | You can redirect standard output of one command to standard input of the next command. This is done by separating the commands by the pipe character ({{ic|<nowiki>|</nowiki>}}). Example: |
||
cat example.txt | head |
cat example.txt | head |
||
+ | (標準出力だけでなく) 他のファイル記述子をパイプにリダイレクトすることもできます。次の例では、標準エラーのファイル記述子の番号と {{ic|>}} をパイプに付けることで、あるコマンドの標準エラーを他のコマンドの標準入力に流し込んでいます: |
||
− | You can redirect other file descriptors to the pipe (besides standard output). The next example shows how to use standard error of one command as standard input of another command, prepending standard error file descriptor's number and {{ic|>}} to the pipe: |
||
$ command 2>| less |
$ command 2>| less |
||
− | + | 上記を実行すると {{ic|command}} が実行されてから標準エラーが {{ic|less}} コマンドにリダイレクトされます。 |
|
== 設定 == |
== 設定 == |
||
84行目: | 84行目: | ||
=== プロンプト === |
=== プロンプト === |
||
+ | git ディレクトリにいるときにブランチやダーティな状態を fish に表示してほしい場合、以下を {{ic|~/.config/fish/config.fish}} に追加します: |
||
− | If you would like fish to display the branch and dirty status when you are in a git directory, you can add the following to your {{ic|~/.config/fish/config.fish}}: |
||
{{bc|<nowiki> |
{{bc|<nowiki> |
||
# fish git prompt |
# fish git prompt |
||
121行目: | 121行目: | ||
=== /etc/profile と ~/.profile の互換性 === |
=== /etc/profile と ~/.profile の互換性 === |
||
− | + | POSIX 標準の {{ic|sh}} の構文は fish と互換性がないため、fish では {{ic|/etc/profile}} (そして {{ic|/etc/profile.d}} の {{ic|*.sh}} ファイル) や {{ic|~/.profile}} を source することはできません。 |
|
− | + | これらのファイルを fish で source したい場合、[[dash]] をインストールして以下の行を {{ic|config.fish}} に追加してください: |
|
env -i HOME=$HOME dash -l -c printenv | sed -e '/PATH/s/:/ /g;s/=/ /;s/^/set -x /' | source |
env -i HOME=$HOME dash -l -c printenv | sed -e '/PATH/s/:/ /g;s/=/ /;s/^/set -x /' | source |
||
+ | 組み込まれているコマンドを使うことで実行ファイルの呼び出しを省くこともできます: |
||
− | an alternative variant will save you one executable invocation by using a builtin command: |
||
env -i HOME=$HOME dash -l -c 'export -p' | sed -e "/PATH/s/'//g;/PATH/s/:/ /g;s/=/ /;s/^export/set -x/" | source |
env -i HOME=$HOME dash -l -c 'export -p' | sed -e "/PATH/s/'//g;/PATH/s/:/ /g;s/=/ /;s/^export/set -x/" | source |
||
==Tips and Tricks== |
==Tips and Tricks== |
||
− | === |
+ | ===履歴置換=== |
− | Fish |
+ | Fish は履歴置換 (例: {{ic|sudo !!}}) を実装しておらず、fish の開発者は [http://fishshell.com/docs/current/faq.html#faq-history 実装する予定もない] と発言しています。しかしながら、履歴置換は多くのユーザーにとって必要不可欠な機能です。Reddit ユーザーの [http://www.reddit.com/u/crossroads1112 crossroads1112] が履歴置換の機能を再現した関数を作成しています (ただし構文は異なっています)。関数は [https://gist.github.com/crossroads1112/77badb2c3455e23b873b github] にあり、使い方はコメントとして書いてあります。オリジナルの構文に近づけた [https://gist.github.com/b-/981892a65837ab0a387e フォークバージョン] も存在し、ヘルパー関数でコマンドを指定すれば {{ic|command !!}} が使えます。 |
== トラブルシューティング == |
== トラブルシューティング == |
||
+ | Arch では、シェルスクリプトの多くは Bash 向けに書かれており、fish に翻訳されていません。そのため、fish をデフォルトシェルに設定しないほうが得策です。fish を実行するコマンドラインオプションを指定してターミナルエミュレータを開くのが一番良いと思われます。ほとんどのターミナルでは {{ic|-e}} スイッチを使います。例えば、fish で gnome-terminal を開きたいときは、使用するショートカットを以下のように変更してください: |
||
− | In Arch, there are a lot of shell scripts written for Bash, and these have not been translated to fish. It is advisable not to set fish as your default shell because of this. The best option is to open your terminal emulator with a command line option that executes fish. For most terminals this is the {{ic|-e}} switch, so for example, to open gnome-terminal using fish, change your shortcut to use: |
||
gnome-terminal -e fish |
gnome-terminal -e fish |
||
+ | LilyTerm などシェルの設定をサポートしていない軽量なターミナルエミュレータでは以下のようにします: |
||
− | With LilyTerm and other light terminal emulators that do not support setting the shell it would look like this: |
||
SHELL=/usr/bin/fish lilyterm |
SHELL=/usr/bin/fish lilyterm |
||
+ | ターミナルの設定や (ターミナルエミュレータにプロファイル機能がある場合) ターミナルのプロファイルに、ターミナルのデフォルトシェルとして fish を設定する方法もあります。ユーザーのデフォルトシェルを変更することで上記の問題が発生するのとは対照的な設定方法です。 |
||
− | Another option is to set fish as the default shell for the terminal in the terminal's configuration or for a terminal profile if your terminal emulator has a profiles feature. This is contrast to changing the default shell for the user which would cause the above mentioned problem. |
||
− | + | tmux で起動するシェルとして fish を設定するには、{{ic|~/.tmux.conf}} に以下を記述: |
|
set-option -g default-shell "/usr/bin/fish" |
set-option -g default-shell "/usr/bin/fish" |
||
+ | システム全体のデフォルトシェルとして fish を設定しないことで、起動時に arch スクリプトを動作させることができ、環境変数は正しく設定され、その他、fish などの Bash と互換性がないターミナルを使用することによる問題を少なくすることが可能です。 |
||
− | Not setting fish as system wide default allows the arch scripts to run on startup, ensure the environment variables are set correctly, and generally reduces the issues associated with using a non-Bash compatible terminal like fish. |
||
+ | fish をデフォルトシェルとして設定した場合、パスが正しく設定されていないことに気づくでしょう。{{ic|~/.config/fish/config.fish}} にセクションを追加してログイン時にパスを適切に設定することができます。ログインシェルの場合だけ実行される {{ic|.profile}} や {{ic|.bash_profile}} と同じです。 |
||
− | If you decide to set fish as your default shell, you may find that you no longer have very much in your path. |
||
− | You can add a section to your {{ic|~/.config/fish/config.fish}} file that will set your path correctly on login. This is much like {{ic|.profile}} or {{ic|.bash_profile}} as it is only executed for login shells. |
||
{{bc| |
{{bc| |
||
160行目: | 159行目: | ||
}} |
}} |
||
+ | {{ic|$MOZ_PLUGIN_PATH}} など、他の環境変数も手動で追加する必要があります。fish をデフォルトシェルとしてシームレスに使えるようにするには骨が折れる作業量になります。 |
||
− | Note that you will need to manually add various other environment variables, such as {{ic|$MOZ_PLUGIN_PATH}}. It is a huge amount of work to get a seamless experience with fish as your default shell. |
||
=== su で bash が起動する === |
=== su で bash が起動する === |
2016年1月1日 (金) 19:30時点における版
fish (friendly interactive shell) は主に対話的に使用することを意図されたユーザフレンドリーなコマンドラインシェルです。
目次
インストール
公式リポジトリより、主流フォーク の安定版 fish パッケージをインストールできます。
最新の開発版は AUR より fish-shell-gitAUR[リンク切れ: アーカイブ: aur-mirror] をインストールします。
2011年に オリジナルの開発者 による 開発が中止された 従来のバージョンは AUR より fish-gitAUR をインストールします。
fish をデフォルトシェルにするには、chsh -s /usr/bin/fish
を実行します。
入出力
ファイル記述子
他のシェルと同じように、入出力ストリームをリダイレクトすることが fish でも出来ます。テキストファイルを使ってプログラムのエラー出力を保存したり、テキストファイルを入力したりする場合に有用です。ほとんどのプログラムは3つの入出力ストリームを使います。ファイル記述子 (FD) と呼ばれる番号で表されます:
- 標準入力 (FD 0) は読み取りに使われます (デフォルトではキーボード)。
- 標準出力 (FD 1) は書き込みに使われます (デフォルトではスクリーン)。
- 標準エラー (FD 2) はエラーや警告の表示に使われます (デフォルトではスクリーン)。
リダイレクト
リダイレクトという仕組みを使うことでファイル記述子の出力先を他のファイルに変えることができます:
標準入力をリダイレクト: $ command < source_file 標準出力をリダイレクト: $ command > destination 既存のファイルに標準出力を追記: $ command >> destination 標準エラーをリダイレクト: $ command ^ destination 既存のファイルに標準エラーを追記: $ command ^^ destination
destination
には以下のどれかを使えます:
- ファイル名 (出力は指定されたファイルに書き込まれます)。
&
と他のファイル記述子の番号。出力は他のファイル記述子に書き込まれます。&
と-
記号。出力はどこにも書き込まれません。
例:
標準出力をファイルにリダイレクト: $ command > destination_file.txt 標準出力と標準出力の両方を同じファイルにリダイレクト: $ command > destination_file.txt ^ &1 標準出力を消す: $ command > &-
パイプ
あるコマンドの標準出力を次のコマンドの標準入力にリダイレクトすることができます。パイプ文字 (|
) を使ってコマンドを区切って下さい。例:
cat example.txt | head
(標準出力だけでなく) 他のファイル記述子をパイプにリダイレクトすることもできます。次の例では、標準エラーのファイル記述子の番号と >
をパイプに付けることで、あるコマンドの標準エラーを他のコマンドの標準入力に流し込んでいます:
$ command 2>| less
上記を実行すると command
が実行されてから標準エラーが less
コマンドにリダイレクトされます。
設定
fish のユーザー設定ファイルは ~/.config/fish/config.fish
に存在しています。.bashrc
と同じように、ターミナルが開かれる時に実行/定義するコマンド、関数を追加します。
ウェブインターフェイス
fish のプロンプトとターミナルの色はウェブインターフェイスで対話的に設定できます:
fish_config
選択した設定は、個人用の設定ファイルに書き込まれます。また、定義された関数と履歴を表示することができます。
プロンプト
git ディレクトリにいるときにブランチやダーティな状態を fish に表示してほしい場合、以下を ~/.config/fish/config.fish
に追加します:
# fish git prompt set __fish_git_prompt_showdirtystate 'yes' set __fish_git_prompt_showstashstate 'yes' set __fish_git_prompt_showupstream 'yes' set __fish_git_prompt_color_branch yellow # Status Chars set __fish_git_prompt_char_dirtystate '⚡' set __fish_git_prompt_char_stagedstate '→' set __fish_git_prompt_char_stashstate '↩' set __fish_git_prompt_char_upstream_ahead '↑' set __fish_git_prompt_char_upstream_behind '↓' function fish_prompt set last_status $status set_color $fish_color_cwd printf '%s' (prompt_pwd) set_color normal printf '%s ' (__fish_git_prompt) set_color normal end
コマンド補完
fish は man ページから自動補完を生成できます。~/.config/fish/generated_completions/
に補完が書き込まれており、以下を呼び出すことによって生成することができます:
fish_update_completions
また、独自の補完を ~/.config/fish/completions/
に定義できます。/usr/share/fish/completions/
でいくつかの例を見ることができます。
fish の開発元のポリシーが、上流の tarball に存在する補完を全て含めるというものなので pacman, pacman-key, makepkg, cower, pbget, pacmatic などの Arch Linux 固有のコマンドの文脈に沿った補完も fish に含まれています。メモリ管理が賢いために、リソースに悪影響を与えることはありません。
/etc/profile と ~/.profile の互換性
POSIX 標準の sh
の構文は fish と互換性がないため、fish では /etc/profile
(そして /etc/profile.d
の *.sh
ファイル) や ~/.profile
を source することはできません。
これらのファイルを fish で source したい場合、dash をインストールして以下の行を config.fish
に追加してください:
env -i HOME=$HOME dash -l -c printenv | sed -e '/PATH/s/:/ /g;s/=/ /;s/^/set -x /' | source
組み込まれているコマンドを使うことで実行ファイルの呼び出しを省くこともできます:
env -i HOME=$HOME dash -l -c 'export -p' | sed -e "/PATH/s/'//g;/PATH/s/:/ /g;s/=/ /;s/^export/set -x/" | source
Tips and Tricks
履歴置換
Fish は履歴置換 (例: sudo !!
) を実装しておらず、fish の開発者は 実装する予定もない と発言しています。しかしながら、履歴置換は多くのユーザーにとって必要不可欠な機能です。Reddit ユーザーの crossroads1112 が履歴置換の機能を再現した関数を作成しています (ただし構文は異なっています)。関数は github にあり、使い方はコメントとして書いてあります。オリジナルの構文に近づけた フォークバージョン も存在し、ヘルパー関数でコマンドを指定すれば command !!
が使えます。
トラブルシューティング
Arch では、シェルスクリプトの多くは Bash 向けに書かれており、fish に翻訳されていません。そのため、fish をデフォルトシェルに設定しないほうが得策です。fish を実行するコマンドラインオプションを指定してターミナルエミュレータを開くのが一番良いと思われます。ほとんどのターミナルでは -e
スイッチを使います。例えば、fish で gnome-terminal を開きたいときは、使用するショートカットを以下のように変更してください:
gnome-terminal -e fish
LilyTerm などシェルの設定をサポートしていない軽量なターミナルエミュレータでは以下のようにします:
SHELL=/usr/bin/fish lilyterm
ターミナルの設定や (ターミナルエミュレータにプロファイル機能がある場合) ターミナルのプロファイルに、ターミナルのデフォルトシェルとして fish を設定する方法もあります。ユーザーのデフォルトシェルを変更することで上記の問題が発生するのとは対照的な設定方法です。
tmux で起動するシェルとして fish を設定するには、~/.tmux.conf
に以下を記述:
set-option -g default-shell "/usr/bin/fish"
システム全体のデフォルトシェルとして fish を設定しないことで、起動時に arch スクリプトを動作させることができ、環境変数は正しく設定され、その他、fish などの Bash と互換性がないターミナルを使用することによる問題を少なくすることが可能です。
fish をデフォルトシェルとして設定した場合、パスが正しく設定されていないことに気づくでしょう。~/.config/fish/config.fish
にセクションを追加してログイン時にパスを適切に設定することができます。ログインシェルの場合だけ実行される .profile
や .bash_profile
と同じです。
if status --is-login set PATH $PATH /usr/bin /sbin end
$MOZ_PLUGIN_PATH
など、他の環境変数も手動で追加する必要があります。fish をデフォルトシェルとしてシームレスに使えるようにするには骨が折れる作業量になります。
su で bash が起動する
su で bash が起動する場合 (Bash がデフォルトシェルのため)、fish に関数を定義してください:
$ funced su function su /bin/su --shell=/usr/bin/fish $argv end $ funcsave su
ログイン時に X を起動
~/.config/fish/config.fish
の一番下に以下を追加します:
# start X at login if status --is-login if test -z "$DISPLAY" -a $XDG_VTNR -eq 1 exec startx -- -keeptty end end
参照
- http://fishshell.com/ - ホームページ
- http://fishshell.com/docs/2.1/index.html - ドキュメント