シンボリックリンクのターゲットファイルを含むディレクトリに移動するためのコマンド(またはエイリアス)を作成するにはどうすればよいでしょうか。たとえば、シンボリックリンクがある場合
symFile@ -> /Users/zhermes/some/dir/someFile
走れるようになりたいし<command> symFile
、cd
私もそうしたい/Users/zhermes/some/dir/
答え1
次の関数は、シンボリックリンクが存在するかどうかを確認し、その親ディレクトリに移動します。もちろん、通常のファイルでも機能します。またはcd
からのエラーについては、さらに巧妙にすることもできますが、これは始まりです。readlink
cd
GNU/Linux:
GNU/Linux では、以下を使用できますreadlink -f
。
cdln() { [[ -f $1 ]] && cd "$(dirname "$(readlink -f "$1")")" || echo "No such file: $1" }
OS X:
以下は、-f
オプションがない Unix / OS X で動作するはずですreadlink
。もちろん、これはネストされたシンボリックリンクをたどらないことを意味します。
cdln() { [[ -f $1 ]] && cd "$(dirname "$(readlink "$1")")" || echo "No such file: $1" }
OS Xではcoreutils
、自家製代わりに使用してくださいgreadlink -f
。