tl; dr readlink -f
は0
、既存のディレクトリに存在しないファイルに対してrealpath
は戻りますが、を返します1
。ただし、存在しないファイルのreadlink -e
ように動作しrealpath
、戻り1
ます(最後の編集者注を参照)。
readlink -f
$ readlink -f non-existent-file
/home/user/non-existent-file
$ echo $?
0
readlink -e
$ readlink -e non-existent-file
$ echo $?
1
realpath
$ realpath non-existent-file
non-existent-file: No such file or directory
$ echo $?
1
readlink -f
存在しないディレクトリ
readlink -f
動作は、パスのどの部分が存在しないかによって異なります。
$ readlink -f /tmp/non-existent-dir/foo
$ echo $?
1
利用可能
readlink
ほとんどのLinuxディストリビューション内にインストールされます。一方、realpath
多くの場合、明示的にインストールする必要があります。
要約すれば
の呼び出しを置き換える場合は、realpath ...
を使用しますreadlink -e ...
。
Ubuntu 16 でreadlink(GNU coreutils)8.21およびrealpathバージョン1.19でテスト済み。
(Ed .: @AnthonyGeogheganは、「これはDebianバージョンのことを指しますrealpath
realpath
readlink -f
。GNU バージョンの動作は同じです」)
readlink -f
GNUよりずっと前にOpenBSDにいました。NetBSD、FreeBSD、およびOpenBSDのすべてが現在readlink -f
(リンクでも言及されています)います。realpath
FreeBSDとIRIXには長い間あります(Debianのものより前のものかどうかはわかりません)。HPUXとIRIXにもありますがreadlink
、そうではありません-f
。realpath
DebianのExperimental のパッケージは、coreutils のパッケージになりました(問題が発生するかどうかを確認するための実験として)。dwwwrealpath
以上のような行為readlink -e
のようなGNU 1ながら、readlink -f
そう、それは完全なDROPINではありませんが、交換してください