例えば
echo Something >> SomeFile
私はこの追加がすでに存在する場合にのみ機能したいと思いますSomeFile
。
今は以下を使用しています。
if [ -e SomeFile ]; then
echo Something >> SomeFile
fi;
しかし、ここには競争条件がなければなりません。この期間中にSomeFile
条件評価がある可能性があります。 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
が、ファイルが存在し、ゼロバイトの場合でも失敗することに注意してください。うまくいけば、これが大きな問題にならないことを願っています。