¿Cómo hacer que los files adjuntos fallen si el file ya no existe?

Por ejemplo

echo Something >> SomeFile 

Quiero que este SomeFile funcione solo si SomeFile ya existe.

En este momento estoy usando lo siguiente:

 if [ -e SomeFile ]; then echo Something >> SomeFile fi; 

Pero debería haber una condición de carrera aquí. Durante la evaluación de la condición if SomeFile puede existir. Se produce un cambio de context entre la condición if y el apéndice. Se ejecuta otra aplicación que elimina SomeFile . En ese caso, el SomeFile crearía SomeFile .

Necesito una solución para trabajar tanto para bsd sed como para gnu sed.


Es bastante simple hacer esto en python con os.open y 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 

Creo que esto debería lograr lo que quieres:

 sed -i '' -e '$a\ Something\ ' SomeFile 

Hice esto con mac osx / bsd sed para que pueda eliminar la parte -i '' . Esto fallará si SomeFile no existe, pero una advertencia a esto es que también fallará si el file existe y tiene 0 bytes, con suerte no es un SomeFile para usted.