次のコマンドを実行すると、期待どおりに機能し、src
fromへのシンボリックリンクが生成されますinclude/bb
。
ln -sf ../src include/bb
src
ただし、同じコマンドを再度呼び出すと、akaに追加のシンボリックリンクが生成されます。include/bb
src/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
リンクが作成されます。したがって、次にコマンドを実行すると、名前付きの新しいリンクがディレクトリに追加されます。include
include/bb
src
とは何の関係もありません;
。
使用しようとすることもできます。
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
。
そこで今回はディレクトリである../src
inside へのリンクを生成するように依頼しています。include/bb/
リンク名は、デフォルトで既存のベース名に基づいて指定されますsrc
(この例の場合). 3番目に実行すると、../src/src
現在存在するエラーが発生します。
include/bb
リンクを使用するたびに事前にリンクを削除すると、これを防ぐことができますrm include/bb
。セミコロンはこれとは何の関係もありません。