El usuario llama a mi script con una ruta de archivo que se creará o se sobrescribirá en algún momento del script, como foo.sh file.txt
o foo.sh dir/file.txt
.
El comportamiento de crear o sobrescribir es muy similar a los requisitos para colocar el archivo en el lado derecho del >
operador de redireccionamiento de salida, o pasarlo como argumento a tee
(de hecho, pasarlo como argumento tee
es exactamente lo que estoy haciendo) )
Antes de entrar en las entrañas de la secuencia de comandos, quiero hacer una verificación razonable si el archivo se puede crear / sobrescribir, pero no crearlo realmente. Esta verificación no tiene que ser perfecta, y sí, me doy cuenta de que la situación puede cambiar entre la verificación y el punto en el que el archivo está realmente escrito, pero aquí estoy de acuerdo con una solución de tipo de mejor esfuerzo para poder rescatarme temprano en el caso de que la ruta del archivo no sea válida.
Ejemplos de razones por las que el archivo no se pudo crear:
- el archivo contiene un componente de directorio,
dir/file.txt
pero el directoriodir
no existe - el usuario no tiene permisos de escritura en el directorio especificado (o el CWD si no se especificó ningún directorio
Sí, me doy cuenta de que verificar los permisos "por adelantado" no es The UNIX Way ™ , sino que debería probar la operación y pedir perdón más tarde. Sin embargo, en mi script en particular, esto conduce a una mala experiencia de usuario y no puedo cambiar el componente responsable.
/foo/bar/file.txt
. Básicamente paso la ruta a Me tee
gusta tee $OUT_FILE
donde OUT_FILE
se pasa en la línea de comando. Eso debería "funcionar" con rutas absolutas y relativas, ¿verdad?
tee -- "$OUT_FILE"
al menos necesitarías . ¿Qué pasa si el archivo ya existe o existe pero no es un archivo normal (directorio, enlace simbólico, fifo)?
tee "${OUT_FILE}.tmp"
. Si el archivo ya existe, se tee
sobrescribe, que es el comportamiento deseado en este caso. Si es un directorio, tee
fallará (creo). enlace simbólico No estoy 100% seguro?