1
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?

cdが面倒くさい人向けのツールを作った

1
Posted at

cd打つの面倒くさくないですか?

例えば今開発中のプロジェクトフォルダだとか、お気に入りの画像を置いてあるフォルダのように頻繁に移動したいディレクトリがあるとします。

このとき

$ cd ~/fav/img

のように打つの面倒くさくないですか?

僕は怠惰なので

$ cd i

くらいのお気楽さで移動したいです。

作った

このニーズを解決してくれるツールはもちろん探したんですが、あんまり使い方がシンプルじゃなかったので自分で作りました。まあ何ヶ月も前の話ですが、今思い出したので紹介します。Go製です。

りどみにあるように

$ go install github.com/midry3/ax/cmd/ax-lookup@latest

でインストール。

~/.bashrcに以下を追記。

eval "$(ax-lookup)"

お馴染みの以下を実行。

$ source ~/.bashrc

3.~/.axconfを編集、json形式です。
例えば

{
    "i": "~/fav/img"
}

としておけば、ターミナルで

$ ax i

と打つだけで~/fav/imgに移動できます。

ただし、基本はcdなので、 ~/.axconfに登録したエイリアス よりも カレントディレクトリに存在するディレクトリ を優先するので、例えばカレントディレクトリにiというフォルダがあるとそっちに移動してしまいます。そういうときは

$ ax @i

とすれば名前衝突を回避できます。

詰まった点

これは僕の勘違いだったのですが、プログラム内で普通にcd叩いてもターミナルの方まで影響を与えられないです。

ダメ❌️
package main

import (
	"fmt"
	"os/exec"
)

func main() {
	_, err := exec.Command("cd", "~/fav/img")
	if err != nil {
		fmt.Println(err)
		return
	}
}

ですので少し迂回手段を取りました。bashには関数機能があります。

f() {
    echo $1
}

この関数はコマンドのように呼ぶことができます。

$ f hello
# hello

これを利用して、axという関数を定義し、コマンドのように使えるようにしました。お陰様で~/.bashrcに依存することになってしまいましたが……。

QOL上がりました

自作ツールの中でなんやかんや一番使ってます。我ながら👍️

1
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
1
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?