its*_*dok 8 bash io-redirection symlink
在 bash 中,一个命令链接
echo test > actual.txt
Run Code Online (Sandbox Code Playgroud)
将替换actual.txt
用“test”调用的文件的内容,如果文件不存在则创建该文件。但是,如果文件确实存在,bash 只会打开它,截断它,然后将新内容写入文件。
具体来说,重定向命令在这种情况下会失败:
ln -s /some/illegal/path link.txt
echo test > link.txt
Run Code Online (Sandbox Code Playgroud)
Bash 4.4.12 给了我令人困惑的错误信息link.txt: No such file or directory
。
避免这种情况的一种方法是确保在运行重定向命令之前删除文件。
rm link.txt && echo test > link.txt
Run Code Online (Sandbox Code Playgroud)
不过,我想知道是否对 bash 选项或重定向运算符进行了一些调整,以防止这种失败模式。有任何想法吗?
尝试写入死符号链接相当于尝试写入不存在的路径。无法“调整”输出重定向以在 中创建路径(包括中间目录)bash
,并且没有 shell 选项bash
可以自动执行此操作。
如果中间路径存在,但链接的终点不存在,那么它将通过重定向创建。
你可以做类似的事情
if [ -h file ] && [ ! -f file ]; then
rm file
fi
Run Code Online (Sandbox Code Playgroud)
测试“文件”是否是符号链接 ( -h
) 以及它是否指代存在的常规文件 ( -f
)。如果它是符号链接但不引用文件,则将其删除。
归档时间: |
|
查看次数: |
8127 次 |
最近记录: |