El ;token es un separador de comandos, al igual que la nueva línea. Como thenes un comando separado, se necesita el punto y coma anterior para poder escribirlo en la misma línea. Los punto mkdiry coma después y fison superflores.
Andreas Riedmüller
Respuestas:
278
Primero, en bash "[" es solo un comando, que espera la cadena "]" como último argumento, entonces el espacio en blanco antes del corchete de cierre (así como entre "!" Y "-d" que deben ser dos argumentos separados también) es importante:
El argumento -pno ignora exactamente los errores: invoca un modo diferente donde se crean los componentes de ruta que no existen (y, por lo tanto, no es un error si sucede que es necesario crear cero). El comportamiento es diferente ya que creará componentes distintos al último, que pueden ser o no deseables.
BeeOnRope
23
Es necesario espacios dentro de las [y ]los soportes:
#!/bin/bashif[!-d /home/mlzboy/b2c2/shared/db ]then
mkdir -p /home/mlzboy/b2c2/shared/db
fi
De forma más limpia, explote la evaluación de acceso directo de los operadores lógicos de shell. El lado derecho del operador se ejecuta solo si el lado izquierdo es verdadero.
mmh, no más limpio: solo más corto. Es difícil entender el significado de tal afirmación si la encuentras.
Davide Orazio Montersino
1
Me gusta esto, aunque el -pargumento hace innecesario el cheque. Todavía puede usarlo cuando no lo desee -p, es decir, cuando no desee que todos los directorios principales se creen automáticamente.
ADTC
3
En realidad, es aún más corto de escribir [ -d /path/to/dir ] || mkdir /path/to/dir... el lado derecho se ejecuta cuando el lado izquierdo es falso.
ADTC
4
Creo que deberías volver a formatear un poco tu código:
;
token es un separador de comandos, al igual que la nueva línea. Comothen
es un comando separado, se necesita el punto y coma anterior para poder escribirlo en la misma línea. Los puntomkdir
y coma después yfi
son superflores.Respuestas:
Primero, en bash "[" es solo un comando, que espera la cadena "]" como último argumento, entonces el espacio en blanco antes del corchete de cierre (así como entre "!" Y "-d" que deben ser dos argumentos separados también) es importante:
En segundo lugar, dado que está utilizando -p cambiar a
mkdir
, esta comprobación es inútil, porque esto es lo que hace en primer lugar. Solo escribe:y eso es.
fuente
-p
bandera hace que se creen directorios principales si es necesario.En realidad no hay necesidad de verificar si existe o no. Como ya desea crearlo si existe, solo mkdir lo hará
fuente
-p
bandera hace que se creen directorios principales si es necesario.Simplemente haz:
mkdir arrojará un error si la carpeta ya existe. Para ignorar los errores, escriba:
No es necesario hacer ninguna comprobación ni nada por el estilo.
Para referencia:
-p, --parents no error if existing, make parent directories as needed
http://man7.org/linux/man-pages/man1/mkdir.1.htmlfuente
-p
no ignora exactamente los errores: invoca un modo diferente donde se crean los componentes de ruta que no existen (y, por lo tanto, no es un error si sucede que es necesario crear cero). El comportamiento es diferente ya que creará componentes distintos al último, que pueden ser o no deseables.Es necesario espacios dentro de las
[
y]
los soportes:fuente
De forma más limpia, explote la evaluación de acceso directo de los operadores lógicos de shell. El lado derecho del operador se ejecuta solo si el lado izquierdo es verdadero.
fuente
-p
argumento hace innecesario el cheque. Todavía puede usarlo cuando no lo desee-p
, es decir, cuando no desee que todos los directorios principales se creen automáticamente.[ -d /path/to/dir ] || mkdir /path/to/dir
... el lado derecho se ejecuta cuando el lado izquierdo es falso.Creo que deberías volver a formatear un poco tu código:
fuente