unrealMan’s blog

IT関連の奮闘記を備忘録がてら記載していきます!

【コピペでOK】shで簡単に登録ディレクトリに移動

よく使うディレクトリを設定しておいて、簡単にディレクトリ移動する方法です。
コマンド登録しておけば、ワンコマンドで指定のディレクトリに移動できます。

①以下のshスクリプトを任意のディレクトリに配置

Windowsの場合は、Gitbashなどのターミナルで使用してください。
※ファイル名は任意です、使いやすいファイル名に変更してください。
 (表記のファイル名はcdコマンドにちなんでいます。)

cds.sh

#!/bin/bash

#パス設定
path=(
"/c/Users/unrealman/project/mnt/nfs/app1"
"/c/Users/unrealman/project/mnt/nfs/app2"
"/c/Users/unrealman/project/mnt/nfs/app3"
"/c/Users/unrealman/project/mnt/nfs/app3/log"
#登録したいディレクトリを設定
)

#選択肢の表示
i=0
for value in ${path[@]}; do
echo "${i}:${value}";
let i++
done

#入力値の待ち受け
read -p "Hit number: " num

#入力値に応じてディレクトリ移動
cd ${path[${num}]}

②コマンド登録(.bash_profileファイルを編集)

 .bash_profileに以下の行を追加してください。
※.bash_profileがなければ作成してください。
※~/custom/cds.shの部分のパスは①で配置したディレクトリを指定してください。
 今回は、ホームディレクトリ(~)の中にcustomディレクトリをきって配置しました。

$ vi ~/.bash_profile

alias cds='source ~/custom/cds.sh';

【ポイント】
"sh"や"bash"ではなく、"source"で読み込んでいる点がポイントです。
"sh"や"bash"だと、新たな子プロセスを生成して実行するので、
shスクリプト内のcdコマンドで移動するのは子プロセスであり、
shスクリプトの実行が完了すると元に戻ってしまいます。
対して"source"の場合は現在のプロセスで実行するため、
shスクリプト実行後のディレクトリが保持されるというわけです。

③.bash_profileの変更を反映

※.bash_profileはログイン時に読み込まれるため、本操作は次回以降のログインの際は不要です。

$ source ~/.bash_profile

④動作確認

登録したディレクトリが表示され、左の番号を入力してEnterで移動していればOKです。

unrealman@XXX-12345 MINGW64 ~
$ cds
0:/c/Users/unrealman/project/mnt/nfs/app1
1:/c/Users/unrealman/project/mnt/nfs/app2
2:/c/Users/unrealman/project/mnt/nfs/app3
3:/c/Users/unrealman/project/mnt/nfs/app3/log
Hit number: 3

unrealman@XXX-12345 MINGW64 ~/project/mnt/nfs/app3/log
$

以上です。