特定のコマンドへのフルパスを必要とするスクリプトを作成しています。実際のコマンドへのシンボリックリンクがある可能性があるため、readlink -f
標準パスを取得しようとしました。しかし、私は本当に欲しいものを手に入れていませんreadlink -f
。次の例を挙げて説明します。
/home/user/Documents
現在のディレクトリが次のと仮定します。パスを取得しようとすると、次の結果が表示されます。sleep
readlink -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
避けることができます。readlink -f
2番目の例では、返されたパスがtype -P
正規パスであるとします。つまり、パスに非正規コンポーネントがないとします。