例如
echo Something >> SomeFile
我希望这个附加仅在已经存在的情况下才起作用SomeFile
。
现在我正在使用以下内容:
if [ -e SomeFile ]; then
echo Something >> SomeFile
fi;
但这里应该有一个竞争条件。期间SomeFile
可能存在 if 条件求值。上下文切换发生在 if 条件和追加之间。执行一些其他应用程序会删除SomeFile
.在这种情况下,追加将创建SomeFile
.
我需要一个同时适用于 bsd sed 和 gnu sed 的解决方案。
在 python 中执行此操作非常简单操作系统打开和O_APPEND
$ rm SomeFile
$ python -c "import os; print(os.open(\"SomeFile\",os.O_APPEND))"
Traceback (most recent call last):
File "<string>", line 1, in <module>
OSError: [Errno 2] No such file or directory: 'SomeFile'
$ touch SomeFile
$ python -c "import os; print(os.open(\"SomeFile\",os.O_APPEND))"
3
答案1
我认为这应该可以实现你想要的:
sed -i '' -e '$a\
Something\
' SomeFile
我使用 mac osx/bsd sed 执行此操作,因此您可以删除该-i ''
部分。如果不存在,这将失败SomeFile
,但需要注意的是,如果文件存在且为 0 字节,它也会失败,希望这对您来说不是一个大问题。