コマンドの正規パスを取得する

コマンドの正規パスを取得する

特定のコマンドの正規パスを必要とするスクリプトを作成しています。実際のコマンドを指すシンボリック リンクが存在する可能性があるため、readlink -f正規パスを取得するために を使用します。しかし、 では実際に必要な結果が得られませんreadlink -f。次の例で説明します。

現在のディレクトリが次のとおりだとします:/home/user/Documents のパスを取得しようとすると、sleepreadlink -fのようになります:

/home/user/Documents/sleep

私が本当に望んでいるのは/bin/sleep

答え1

readlink -f "$(type -P sleep)"

またはパフォーマンスを重視する場合:

cpath="$(type -P sleep)"; [ ! -L "$cpath" ] || cpath="$(readlink -f "$cpath")"

readlink -eの代わりに (existing)を使用するとreadlink -f、存在しないファイルに対して操作を行うというこの種の事故を防ぐことができます。

2 番目の例では、 によって返されるパスがtype -P正規であると想定しています。つまり、パスに非正規のコンポーネントが含まれていないと想定しています。

関連情報