シンボリックリンクが独自に生成されるのを防ぐ方法は?

シンボリックリンクが独自に生成されるのを防ぐ方法は?

次のコマンドを実行すると、期待どおりに機能し、srcfromへのシンボリックリンクが生成されますinclude/bb

ln -sf ../src include/bb

srcただし、同じコマンドを再度呼び出すと、akaに追加のシンボリックリンクが生成されます。include/bbsrc/src

これを防ぐにはどうすればよいですか?


編集する:

明らかに、lnこれは2回呼び出されたときに発生し、セミコロンは最終的にそれとは何の関係もありません。

これを発生させる一連のコマンドは次のとおりです。

mkdir test
cd test
mkdir src
touch src/main.cpp
mkdir include
ln -sf ../src include/bb
ln -sf ../src include/bb

答え1

ln -s ../src include/bb

include/bb../src参照(その場所に基づいて)という名前のリンクを作成するか、include/bb/src参照../src(その場所に基づいて)ファイルを生成します。後者include/bbは存在し、ディレクトリ(実際にまたはディレクトリへのリンク)の場合です。

したがって、コマンドを一度実行すると、ディレクトリであるディレクトリ対ディレクトリをinclude/bb指すsrcリンクが作成されます。したがって、次にコマンドを実行すると、名前付きの新しいリンクがディレクトリに追加されます。includeinclude/bbsrc

とは何の関係もありません;

使用しようとすることもできます。

ln -sTf ../src include/bb

代わりに(by -T)はln既存のファイルをinclude/bb通常のファイルとして処理するように指示し(ディレクトリを参照するリンクであっても)、(by -f)ファイルを強制的に置き換えます。

答え2

走るとき

ln -s ../src include/bb
ln -s ../src include/bb

include/bb最初の行はディレクトリへのリンクを生成します../src(予想どおり)。

2番目の発見はinclude/bbすでに存在します。それが通常のファイルであるか、通常のファイルへのシンボリックリンクであれば、エラーになります(あなたが-fそうしない限り)。代わりにシンボリックリンクです。目次 ../src、前のステップで作成されました。lnいつターゲットオペランドがディレクトリです。:

これなぜならユーティリティは、以下で指定された各ファイルに対して新しいシンボリックリンクを生成する必要があります。source_fileオペランドは、次の既存のディレクトリにある宛先パスです。target_dir

そこで今回はディレクトリである../srcinside へのリンクを生成するように依頼しています。include/bb/リンク名は、デフォルトで既存のベース名に基づいて指定されますsrc(この例の場合). 3番目に実行すると、../src/src現在存在するエラーが発生します。


include/bbリンクを使用するたびに事前にリンクを削除すると、これを防ぐことができますrm include/bb。セミコロンはこれとは何の関係もありません。

関連情報