bash - 仅在文件存在时附加到文件
问题描述
我已经在 SO 上看到了几个关于如何在文件存在时附加到文件并在不存在时创建新文件 ( echo "hello" >> file.txt
) 或在文件存在时覆盖文件并在不存在时创建新文件 () 的答案echo "hello" > file.txt
。
但是我如何确保echo "hello"
只有在文件已经存在时才有效并附加到文件中,如果不存在则引发错误?
编辑:现在,我已经在使用[ -f file.txt ]
. 我想知道是否有一种方法可以简单地使用echo
.
解决方案
假设文件不存在或者既可读又可写,你可以先尝试打开它进行读取,以确定它是否存在,例如:
command 3<file 3<&- >>file
3<&-
在大多数情况下可以省略,因为程序开始从文件描述符读取3
而不首先重定向它是出乎意料的。
概念证明:
$ echo hello 3<file 3<&- >>file
bash: file: No such file or directory
$ ls file
ls: cannot access 'file': No such file or directory
$ touch file
$ echo hello 3<file 3<&- >>file
$ cat file
hello
$
这是有效的,因为重定向是从左到右处理的,并且重定向错误会导致命令的执行停止。因此,如果file
不存在(或不可读)3<file
失败,shell 会打印一条错误消息并停止处理此命令。否则,3<&-
关闭与上一步3
关联的描述符 ( ) ,重新打开以进行附加并将标准输出重定向到它。file
>>file
file
推荐阅读
- javascript - 如何使用 JQuery 和 JavaScript 动态获取 div 的长度?
- date - 线程 1:致命错误:无法从空集合 SwiftUI 中删除最后一个元素
- django - django_hosts - NoReverseMatch:找不到“家”的反向。'home' 不是有效的视图函数或模式名称
- javascript - Paperjs 组与 PointText
- python - 如何使用 API 密钥和 python 库正确连接到 Elasticsearch 云?
- javascript - 将 8 字节 (u64) 无符号整数转换为 javascript 的建议
- c++ - C ++在保存完成之前防止系统退出
- machine-learning - 在 neuraxle 管道中使用 fit_params
- emmeans - 测试结果中的对比对比(第一/第二差异)
- python - 鼠标抑制 pynput.mouse 中的不同输出