Эта философия небезопасна по умолчанию.
Возможны две разумные и очевидные стратегии: немедленная запись на диск или отложенная запись. UNIX исторически выбрал последнее. Так что будьте осторожны, после этого вам нужно позвонить fsync
.
Однако вы можете заранее указать безопасность, установив устройство с опцией sync
, или для каждого файла, открыв их с помощью O_SYNC
.
Помните, что UNIX был разработан для компьютерных экспертов. «Безопасный по умолчанию» не рассматривался. Безопасность означает более медленный ввод-вывод, а в тех ранних системах действительно был медленный ввод-вывод, что делало цену выше. К сожалению, ни UNIX, ни Linux не перешли на режим safe-be-default, хотя это не критическое изменение.
Sí, ese es un problema de citas:[ ! $3 ]
se expande a[ ! south brisbane qld ]
(cuatro argumentos entre [
y]
). Y cuando ve cuatro argumentos, siendo el primero un !
, [
espera ver algo como [ ! arg1 op arg2 ]
donde op
es un operador binario. (esto, de nuevo, es una de las cosas diferentes entre [.. ]
y [[.. ]]
; ver esta Q y también esta Q)
brisbane
no es un operador válido, por lo que se queja y devuelve 2, que es falso, por lo que las declaraciones dentro de if
no se ejecutan. Para saber la diferencia entre un error y una prueba fallida regular, necesitaría probar explícitamente el valor devuelto contra 2.
Por otro lado, si $3
está vacío, entonces la prueba se convierte en [ ! ]
,una prueba de un -argumento que verifica si el único argumento no está vacío (es la cadena de un -carácter!
). En ese caso, funciona según lo previsto, aunque tal vez no por el motivo esperado.
Desea que [ ! "$3" ]
o [ -z "$3" ]
mantengan la cadena como un argumento para [
.
Por supuesto, también podría invertir el sentido de la prueba y hacer el trabajo real dentro del if
, de modo que un error en la prueba evitaría ejecutar los comandos principales. Pero eso haría que la estructura del código fuera un poco menos clara.