为什么 ln -sf 默默失败?

为什么 ln -sf 默默失败?

ln -sf source_file target_file即使 source_file 不存在也会成功。

ln -f source_file target_file另一方面,正如预期的那样,失败了。

如何调整以在第一种情况下给出错误没有首先显式测试文件是否存在(即不存在[[ -e source_file ]] && ln -sf source_file target_file

答案1

ln手册页:

创建硬链接时,每个TARGET都必须存在。

那里没有提到符号链接;事实上,这个声明似乎暗示符号链接的情况并非如此。

正如我在对您的问题的评论中所说,当创建指向不存在的源的符号链接时,会创建一个损坏的链接:

$ ln -sfv blah blabla
'blabla' -> 'blah'
$ file blabla
blabla: broken symbolic link to 'blah'

就目前而言ln,没有理由抱怨错误:你要求一个符号链接,它就答应了。由于害怕别名ln,我没有找到一种方法可以在不明确检查源文件是否存在的情况下执行您想要的操作。

相关内容