0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

cdコマンドをもっと便利に

Last updated at Posted at 2020-09-15

環境

fish, version 3.1.2

はじめに

cdコマンドって不便じゃないですか?
僕だけかもしれないですが,ディレクトリを移動する際に,ディレクトリ構造が複雑になると,目的の場所に行くのに時間がかかる.tab補完を使ってもめんどくさいものはめんどくさい.

ということで,作ってみよう.

実装

まず完成品から.
Current Working Directoryということで,cwdと名付けた.

cwd.sh
# !/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を実行する際,. が必要であること.

シェルスクリプトは、基本的に、現在のシェルとは別のシェル(サブシェル)で実行される。
そのため、サブシェルでいくらディレクトリを移動しても、スクリプトが終了すると、もともといたディレクトリに戻されてしまうため。

参考シェルスクリプト(Bash)でcdができない

使用例

$ cwd ~/Desktop
$ cwd

1回目で,~/Desktopを記憶する.
2回目以降,引数なしで,~/Desktopに移動できる.

$ pwd
~/Desktop
$ cwd -p
$ cwd

~/Desktopにいる状態で,-pを引数に取ると,pwdを記憶する.(今回なら~/Desktop)
以下同じ.

展望

記憶できる,pathを増やしたい.

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?