Bash:重定向到文件,始终创建新文件

Bash:重定向到文件,始终创建新文件

在 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)。如果它是符号链接但不引用文件,则将其删除。

相关内容