3
私は冪等級を意図したbashスクリプトを持っています。シンボリックリンクが作成されます。リンクがすでに存在する場合は、大丈夫です。なぜこのbash -eと-Lテストはこのリンクを捕捉しないのですか?
はここls -l
によると、エキス
L="/var/me/foo"
if [[ -e "$L" ]] && ! [[ -L "$L" ]];
then
echo "$L exists but is not a link."
exit 1;
elif [[ -e "$L" ]] && [[ -L "$L" ]];
then
echo "$L exists and is a link."
else
ln -s "/other/place" "$L" ||
{
echo "Could not chown ln -s for $L";
exit 1;
}
fi
/var/me/foo
が既に/other/place
を指すシンボリックリンクであるファイルです。私はこのスクリプトを実行すると
それにもかかわらず、if
とelif
枝が入っないではなく、我々はelse
に行くと、ファイルがすでに存在しているため、失敗しln
を試み、です。
私のテストはなぜ機能しませんか?
人々は/ペーストをコピーして、変更を必要とせずに、それを実行できるようにあなたは、一時ディレクトリに実行できる例を作成する(あるいは、独自のディレクトリを作成するには、 'mktempの-d'を使用しています)でした。名前やroot特権を持っていますか? –
また、 '/ other/place'は存在しますか?それが必要な場合は、実際に作成した例が実際に作成することを確認してください(もちろん、一時ディレクトリーの下に)。 –
...また、 '-e'が真である場合に' -L'をチェックするのはなぜですか? –