環境
fish, version 3.1.2
はじめに
cdコマンドって不便じゃないですか?
僕だけかもしれないですが,ディレクトリを移動する際に,ディレクトリ構造が複雑になると,目的の場所に行くのに時間がかかる.tab補完を使ってもめんどくさいものはめんどくさい.
ということで,作ってみよう.
実装
まず完成品から.
Current Working Directoryということで,cwdと名付けた.
# !/usr/local/bin/fish
set len (count $argv)
if test "$len" -gt 0
and test "$len" -lt 2
if test "$argv" = "-p"
set wd (pwd)
echo $wd > ~/.cwd_path
else
set wd $argv
echo $wd > ~/.cwd_path
end
end
while read line
set path $line
end< ~/.cwd_path
cd $path
まず,引数の個数を数える.
それが,0より大きく,2未満,すなわち1個ならifの中に入る.
(fish shellのifの書き方が独特で苦戦した.)
つぎに,引数が'-p'なら,pwdの出力を~/.cwd_pathという隠しファイルに格納する.
それ以外なら,引数自体を~/.cwd_pathに入れる.
最後に,~/.cwd_pathを読み取って,そこにcdする.
(引数がなければ,ここだけ実行されるため,前回の作業ディレクトリに一発で移動できる.)
設定
~/.config/fish/config.fishに以下を記述.
alias cwd='. /usr/local/bin/cwd.sh'
- ポイントは,=の前後にスペースを入れてはいけない.
- shを実行する際,. が必要であること.
シェルスクリプトは、基本的に、現在のシェルとは別のシェル(サブシェル)で実行される。
そのため、サブシェルでいくらディレクトリを移動しても、スクリプトが終了すると、もともといたディレクトリに戻されてしまうため。
使用例
$ cwd ~/Desktop
$ cwd
1回目で,~/Desktopを記憶する.
2回目以降,引数なしで,~/Desktopに移動できる.
$ pwd
~/Desktop
$ cwd -p
$ cwd
~/Desktopにいる状態で,-pを引数に取ると,pwdを記憶する.(今回なら~/Desktop)
以下同じ.
展望
記憶できる,pathを増やしたい.