はじめに
最近、自分らのチームに導入していただいた Linux Server に
GPU 付きの KVM を立てられるように環境構築をしているのですが、
これがどうにもうまくいかず、作業が煮詰まってきたので、
気分を変えるために shell を変えよう! (意味不明) という気持ちになって、
軽い気持ちで fish を使い始めました。
その時の使い方や設定に関するメモを残したものです。
以降、面白そうなことがわかったら追記予定です。
軽い気持ちで始める fish (install から)
以降本文です。
-
何よりまずは install です。
$ sudo apt install fish
-
OS は ubuntu を使っているので apt で install します。
- ここは
$ fish
として、fish がまだインストールされていない場合は、出力でサジェストされるのではないかと思いますので、迷ったらまず fish を実行してみてください。
- ここは
他のシェルから一時的に fish を使う
-
$ fish
で実行
fish の 設定ファイル
-
ls -A
してもないので作成-
touch ~/.fishrc
するのかと思ったら、別で指定する場所がある?! - ちなみに ユーザのホームディレクトリ下に
.fishrc
とかfish.conf
みたいなファイルを作ってsource
すれば動くのかもわかりませんが、現段階では未検証です。
-
書く場所が他の shell と違うという情報
- どこに設定を書くのか分からない
- そもそも設定ファイルの場所が大きく異なります。
.zshrc
や.zprofile
のように.fishrc
、.fishprofile
なのかと思っていました。- しかし、実際は全く違っていて
~/.config/fish/config.fish
という1つのファイルに設定を書きます。
-
とのことでしたので、まずはこの設定ファイルがあるか確認しに行きます。
~> ls .config/fish/fishd.PcName
-
というファイルがありました。
- ここで 注意 なのですが、自分で alias などを登録する場合は、 ここではなく、自分で設定ファイルを新しく作る ことになります。
-
このファイルには
# This file is automatically generated by the fish. # Do NOT edit it directly, your changes will be overwritten.
のように、「いじるな」って書いてありました。
最初ここに書いて動かなくて、がっつり無視してごめんなさい..という気持ちになりました。
alias を登録してみる
-
設定ファイルを
.config/fish/
下に新しく作った。user@PcName ~> touch .config/fish/config.fish
-
user@PcName ~> emacs .config/fish/config.fish
-
以下の内容を記載 (エディタはお好みで..)
# alias alias l 'ls -CF'
ちなみに、なんで
l
を登録したかというとla
とかll
とかは既に動く(割り当てられている) からです。あまり alias とか登録してない初心者() なので、温かい目で見てほしいです..
-
-
どう読み込めばいいのかわからないので shell 再起動してみる。
~> exec $SHELL -l
-
怒られた。
fish: Variables may not be used as commands. In fish, please define a function or use 'eval $SHELL'. exec $SHELL -l ^
- 「変数
$SHELL
が未定義です」だと..
- 「変数
-
user@PcName ~> echo $SHELL
/usr/bin/fish
- いや入ってるじゃんか。
-
Variables may not be used as commands
- え? 変数をコマンド内で使えないの..?
-
sudachi@sudachi-dynabook-R734-M ~> exec /usr/bin/fish -l
Welcome to fish, the friendly interactive shell
ほんとだ。指定したら実行できた。
-
ちなみに、以下の方法で、設定ファイルを再読み込みできます。
user@PcName ~> source .config/fish/config.fish
-
user@PcName ~> l
Desktop/ backup/ doc/ jupyter-working/ public_html/ anaconda3/ dls/ examples.desktop memo/ share/
- 動いた!!
ということで alias の登録方法はわかった。(こととする)
-
数少ない alias を登録
-
僕が登録している alias はせいぜいこれくらいなので、登録しておきます..
# alias alias l 'ls -CF' alias rm "rm -i" alias cp "cp -i" alias mv "mv -i"
-
PATH の設定
-
.bashrc
や.zshrc
とは構文が異なる、そうです。# PATH set -x PATH /path/to/hogehoge $PATH
- のように書く、そうです。
とりあえず、anaconda を動かすまで作業をする。
個人的に Python をよく書くので、anaconda が使えるようにしたいです。
-
conda が動くように PATH を通す
-
現状 :
user@PcName ~> conda
conda: コマンドが見つかりません
-
.bashrc
の PATH を見に行ってみるexport PATH="/home/user/anaconda3/bin:$PATH"
-
.config/fish/config.fish
に以下の内容を追記してみる。set -x PATH /home/user/anaconda3/bin $PATH
-
user@PcName ~> conda -V
conda 4.7.10
- お。いいね。
-
-
conda activate できるように
conda init
する。-
user@PcName ~> conda init fish
modified /home/sudachi/.config/fish/config.fish
- modify する場所はいい感じです。
-
user@PcName ~> source .config/fish/config.fish
sudachi@sudachi-dynabook-R734-M ~> (base)
- え。そこに出るの..??
-
user@PcName ~> conda activate tenfl (base)
user@PcName ~> (tenfl)
-
user@PcName ~> which python (tenfl)
/home/user/anaconda3/envs/tenfl/bin/python
使えてるし..
カッコ悪い感と、見にくい感は否めないですが、まあいいか。
-
とりあえず、使えることには使えるようなのでこれにて終了。
注意
-
conda init fish
をした後、source
をしてもうまく conda activate などができない場合があります (正直言って理由は謎..私にはよくわからない) - その場合は
conda init
で追記された内容を全て消し、conda 自体の PAHT の下に以下のように追記してみてください。
set -x PATH /home/user/anaconda3/bin $PATH
source (conda info --root)/etc/fish/conf.d/conda.fish
-
変更後は
source ~/.config/fish/config.fish
をお忘れなく。- 最初の
set -x PATH /home/user/anaconda3/bin $PATH
を消してしまい、fish に login すると返答が返って来なくなるかもしれませんので注意してください。
- 最初の
実用に向けてはまだまだ勉強中...
shell の設定って、とりあえず 「alias」 と 「PATH」 が書ければ概ねどうにかなるやろ、と思っている過激派初心者なので、今回はその2点を中心にまとめてみました。
-
上段でも書きましたが、面白いことがあれば追記予定です。
- 詳しい方おられましたら、ご教授お待ちしております..