readlink
のオプションに従って誰かが私に説明してもらえますか 簡単な言語でのコマンド:
-f, --canonicalize
canonicalize by following every symlink in every component of
the given name recursively; all but the last component must
exist
-e, --canonicalize-existing
canonicalize by following every symlink in every component of
the given name recursively, all components must exist
-m, --canonicalize-missing
canonicalize by following every symlink in every component of
the given name recursively, without requirements on components
existence
承認された回答:
かなり自明だと思うので、あなたにとって曖昧に聞こえる部分はよくわかりません…
例を見てみましょう:
–正規化
$ mkdir /tmp/realdir
$ mkdir /tmp/subdir
$ ln -s /tmp/realdir /tmp/subdir/link
$ cd /tmp
$ readlink -f ./subdir/link/nonexistentdir/
/tmp/realdir/nonexistentdir
$ readlink -f ./subdir/link/nonexistentfile.txt
/tmp/realdir/nonexistentfile.txt
オプションが何であれ、readlink
will:
–相対パスを絶対パスに変換します
–シンボリックリンク名を実際のパスに変換します
上記のように、-f
、readlink
このパスの最後の部分(ここではnonexistentfile.txt
)かどうかは関係ありません )存在するかどうか。
このパスの別の部分が存在しない場合は、readlink
何も出力せず、0以外の戻りコードが返されます(これはエラーが発生したことを意味します)。参照:
$ readlink -f /tmp/fakedir/foo.txt
$ echo $?
1
–canonicalize-existing
-e
で同じことを試してみる場合 :
$ readlink -e ./subdir/link
/tmp/realdir
$ readlink -e ./subdir/link/nonexistentfile.txt
$ echo $?
1
-e
を使用 、パスコンポーネントのいずれかが存在しない場合は、readlink
何も出力せず、0とは異なる戻りコードが返されます。
–canonicalize-missing
-m
オプションは-e
の反対です 。パスのコンポーネントが存在するかどうかを確認するためのテストは行われません:
$ readlink -m ./subdir/link/fakedir/fakefile
/tmp/realdir/fakedir/fakefile
$ ln -s /nonexistent /tmp/subdir/brokenlink
$ readlink -m ./subdir/brokenlink/foobar
/nonexistent/foobar