
ln
相対値と強制フラグを設定してシンボリックリンクを作成する際に問題があります。
シナリオは次のとおりです。
$ tree
.
├── folder1
│ └── file
└── folder2
私はリンクを作る:
$ ln -sfr folder1/file folder2
$ tree
.
├── folder1
│ └── file
└── folder2
└── file -> ../folder1/file
これが私が望むものです。しかし、コマンドを再実行すると、リンクが自分自身を指している理由を理解できません。
$ ln -sfr folder1/file folder2
$ tree
.
├── folder1
│ └── file
└── folder2
└── file -> file
このコマンドを3回目の実行でエラーを修正できます。
$ ln -sfr folder1/file folder2
$ tree
.
├── folder1
│ └── file
└── folder2
└── file -> ../folder1/file
コマンドを複数回再実行すると、2 つの状態が切り替わります。なぜそうなのか本当に知りたいです。マニュアルによると、これは問題ではありません。
使用されたバージョンln
(Ubuntu 14.10に付属):
$ ln --version
ln (GNU coreutils) 8.21
[...]
答え1
これはcoreutilsバージョン8.16〜8.21で発生するバグです。 8.22で修正されました。バージョン8.22のリリースノート:
ln --relative は既存のシンボリックリンクを正しく更新します。以前は、既存のリンクの逆参照パスに基づく相対リンクでした。 [このバグは、coreutils-8.16に--relativeが追加されたときに導入されました。 ]