TL;DL
~/.config/fish/config.fish
に以下を追記
set SSH_AGENT_FILE "$HOME/.ssh/ssh_agent"
test -f $SSH_AGENT_FILE; and source $SSH_AGENT_FILE > /dev/null 2>&1
if not ssh-add -l > /dev/null 2>&1
if not ps -ef | grep -v grep | grep ssh-agent
ssh-agent -c > $SSH_AGENT_FILE 2>&1
end
source $SSH_AGENT_FILE > /dev/null 2>&1
find $HOME/.ssh -name id_rsa | xargs ssh-add
end
fish 固有の仕様や構文の解説
set
fish には代入構文がないため set
コマンドを使います。
set 変数名 値
変数置換は bash などと同じように $変数名
で使用可能です。
ちなみに -x
オプションを付けることで export
に相当するものになります。
test [EXPRESSION]; and hogehoge
fish では 他のシェルと違って &&
や ||
の代わりに以下を用います
&& -> and
|| -> or
! -> not
そのため上記コード2行目 test -f $SSH_AGENT_FILE; and source $SSH_AGENT_FILE > /dev/null 2>&1
では、 $SSH_AGENT_FILE
が通常のファイルの場合 source
コマンドで $SSH_AGENT_FILE
を評価します。
> と 2> と /dev/null
>
と 2>
は標準出力と標準エラー出力をリダイレクトするために使います。
echo "hoge" > file.txt
とすることで file.txt
を hoge
に書き換えることが出来ます。
しばしば上記コード内で出てくる/dev/null
はnullデバイスとも呼ばれ、このファイルに出力することで、出力を捨てることが出来ます。
そのため hoge > /dev/null 2> /dev/null
と書くことで標準出力と標準エラー出力ともに破棄することが出来ます。
また &
の後にファイル記述子の番号を入れることで短く書くことも出来ます。
source $SSH_AGENT_FILE > /dev/null 2>&1
*標準エラー出力で使われていた^
は廃止され将来削除予定なので2>
を使いましょう。
そのほか
ざっと fish 固有の構文や仕様などを解説しましたが、残りは bash などでも共通のものなので、上記コードがどういった流れで動作するのかを書いて終わりにしたいと思います。
-
$SSH_AGENT_FILE
が通常のファイルの場合source
コマンドを用いて評価する -
ssh-add -l
からSSH Keyの登録を確認し無ければ分岐する -
ps -ef | grep -v grep | grep ssh-agent
で現在動作しているssh-agent
プロセスがあるか確認、なければssh-agent
を起ち上げる -
ssh-agent
を起動した際に書き込んだ$SSH_AGENT_FILE
を再度source
コマンドを用い評価 - SSH Key を
ssh-add
に渡して登録
あとがき
これで WSL + VSCode で開発している際に Terminal を立ち上げるたび passphrase
を入力しなくてすみます!すみました!🎉