
예를 들어
echo Something >> SomeFile
나는 이 추가가 이미 존재하는 경우에만 작동하기를 원합니다 SomeFile
.
지금은 다음을 사용하고 있습니다.
if [ -e SomeFile ]; then
echo Something >> SomeFile
fi;
하지만 여기에는 경쟁 조건이 있어야 합니다. 이 기간 동안 SomeFile
조건 평가가 있을 수 있습니다 . if 조건과 추가 사이에서 컨텍스트 전환이 발생합니다. 다른 응용 프로그램을 실행하면 삭제됩니다 SomeFile
. 이 경우 추가하면 SomeFile
.
bsd sed와 gnu sed 모두에서 작동하는 솔루션이 필요합니다.
파이썬에서 이 작업을 수행하는 것은 매우 간단합니다.운영 체제가 열립니다그리고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바이트인 경우에도 실패한다는 점에 유의하세요. 바라건대 이것이 큰 문제가 되지 않기를 바랍니다.