試してみてください:
ABSOLUTE_PATH=$(cd /home/nohsib/dvc/../bop; pwd)
あなたが探しているのは readlink
です :
absolute_path=$(readlink -m /home/nohsib/dvc/../bop)
注意: GNU の readlink
を使用する必要があります 「-m」オプションを提供する実装。 BSD の readlink
たとえば、そうではありません。
シンボリックリンクをたどらずにやりたい場合は、 realpath
を使ってみてください オプション -s
付き :
$ realpath -s /home/nohsib/dvc/../bop
/home/nohsib/bop
realpath
があることに注意してください 、通常は最後のコンポーネントを除くすべてが存在する必要があります。したがって、上記が機能するためには、次のすべてがファイル システムに存在する必要があります:
/home
/home/nohsib
/home/nohsib/dvc
しかし、 -m
を使用してその要件を回避できます オプション。
$ realpath -sm /home/nohsib/dvc/../bop
/home/nohsib/bop
(注 realpath
すべてのシステム、特に古い非 Debian システムで利用できるわけではありません。組み込み Linux で作業している人にとっては、残念ながら Busybox realpath
-s
をサポートしていません または -m
切り替えます。)
使用に関する 1 つの問題:
ABSOLUTE_PATH=$(cd ${possibleDirectory}; pwd)
${possibleDirectory} が存在しない場合、ABSOLUTE_PATH は現在のディレクトリに設定されます。これはおそらく、あなたが望むものでも期待するものでもありません.
一般的には、このバージョンを使用する方が望ましいと思います:
ABSOLUTE_PATH=$(cd ${possibleDirectory} && pwd)
${possibleDirectory} が存在しないかアクセスできない場合、ディレクトリ アクセス権限がないために、ABSOLUTE_PATH には空の文字列が含まれます。
これの利点は、状況に応じて、空の文字列をテストするか、自然に失敗させることができることです。 「cd」コマンドが失敗した場合にデフォルトで現在のディレクトリを使用すると、非常に予期せぬ、場合によっては悲惨な結果が生じる可能性があります (例:rm -rf "$ABSOLUTE_PATH" )