在 bash 中,命令链接
echo test > actual.txt
将替换用“test”调用的文件的内容actual.txt
,如果该文件不存在则创建该文件。但是,如果该文件确实存在,bash 将打开它,截断它,并将新内容写入该文件。
具体来说,重定向命令在这种情况下会失败:
ln -s /some/illegal/path link.txt
echo test > link.txt
Bash 4.4.12 给了我令人困惑的错误消息link.txt: No such file or directory
。
避免这种情况的一种方法是确保在运行重定向命令之前删除该文件。
rm link.txt && echo test > link.txt
不过,我想知道是否对 bash 选项或重定向运算符进行了一些调整来防止这种故障模式。有任何想法吗?
答案1
尝试写入死符号链接相当于尝试写入不存在的路径。无法“调整”输出重定向以在 中创建路径(包括中间目录)bash
,并且没有 shell 选项bash
使此过程自动进行。
如果中间路径存在,但链接的终点不存在,则将通过重定向创建它。
你可以做类似的事情
if [ -h file ] && [ ! -f file ]; then
rm file
fi
测试“file”是否是符号链接 ( -h
) 以及它是否引用存在的常规文件 ( -f
)。如果它是符号链接但不引用文件,则将其删除。