私は次のようなものを持っています
フォルダAでこれを行うと、ln -s A a
シンボリックリンクフォルダaが作成されます。コマンドを繰り返すと、ln -s A a
デッドリンクa / Aが発生します。
ifexistsステートメントですべてをラップするのではなく、リンクが存在する場合lnを失敗させる方法はありますか?
答え1
探しているものが単一のコマンドに対する単一の条件付きテストである場合、そのステートメントは必要ありませんif
。リスト。
によるとLESS=+/Lists man bash
:
A list is a sequence of one or more pipelines separated by one of the operators ;, &, &&, or ||, and optionally terminated by one of ;, &, or <newline>. ... An AND list has the form command1 && command2 command2 is executed if, and only if, command1 returns an exit status of zero.
存在するフォルダが存在し、そのディレクトリが存在する場合にのみリンクを作成したいとしますmydir
。mylink2dir
あなたが使用できる:
[ -d mydir ] && ln -s mydir mylink2dir
または均等に:
test -d mydir && ln -s mydir mylink2dir
答え2
-n
ディレクトリの作成を防ぐには、このオプションを使用します。これにより、既存のシンボリックリンクが上書きされますが、既存のシンボリックリンクが指すディレクトリ内にリンクが作成されることはありません。
ln -sn A a
ln -n
POSIXではありませんが、GNU coreutils、BusyBox、および* BSD(OSXを含む)に存在します。