- Published on
Bash cdコマンドでファイルを指定しても移動
- Authors

- Name
- Shou Arisaka / 有坂翔
Windows 10 WSL BashやLinux Bash言語のコマンドライン・コンソール上において、cdコマンドでディレクトリだけでなくファイルを指定しても移動できるようにするオーバーライドのスクリプトを書いてみます。
yuis ASUS /mnt/c/pg$ cd ruby/hoge.md
yuis ASUS /mnt/c/pg/ruby$ cd -
/mnt/c/pg
yuis ASUS /mnt/c/pg$
オーバーライドってやつみたいな。
cd(){
[[ -f "${1}" ]] && builtin cd "$(dirname "${1}")" || builtin cd "${1}"
}
Everythingでファイルのあるディレクトリに移りたい時、ctrl+shift+Cでファイルのフルパスはコピーできるが、フォルダパスはコピーできない。いちいちdirnameするのもあれなのでcdを改造しようと思ったら以外と面倒だった。
bash - Override a builtin command with an alias - Stack Overflowbecause it calls recursively the cd defined by you. To fix, use the builtin keyword like:
ということで、builtin cdをcdにするとバグります。command cdでも出来ないと思う。
cdって以外にアラグメンツが不安定っていうか不定なので、細かく指定しようとすると詰むと思います。例えば-、..、./とか、realpathが効かない値もありますので、"引数がファイルである"という断固確定のものにだけ処理をしてそれ以外の全て曖昧なものは通常の動作ってしたほうが後々バグに悩まされないかと。