Quiero escribir waithasta que exista un archivo en bash. ¿Cómo hago esto?
Intenté esto pero no funciona:
while [ ! -f outputs\/$trace\_hist_len_$hist_len\_page_size_$page_size\.out]; do
echo "waiting for outputs\/$trace\_hist_len_$hist_len\_page_size_$page_size\.out";
done
Parece tener un error de sintaxis.
bash
shell-script
SurenNihalani
fuente
fuente

Ctrl-Kmenos para que no tengas que escapar de nada.$trace,$hist_leny$page_size? ¿Cuál es el error que estás recibiendo? ¿Por qué necesitas escapar del/?waitprobablemente no sea el comando que estás buscando.waitpausará una secuencia de comandos hasta que todos los procesos secundarios finalicen, en cuyo punto continuará.Respuestas:
mientras : ; hacer [[-f "/ ruta / a / archivo"]] && break echo "Pausa hasta que exista el archivo". dormir 1 hechoSin usar algo como
inotifyesto, se trata del límite de lo que vas a poder hacer.El
whilebucle anterior solo se usa:como condicional, lo que prácticamente significa "hacerlo hasta que lo matemos".La línea importante es la
[[prueba. La prueba condicional aquí no usa laifdeclaración. Esto se debe a que[[es un comando real y NO parte de laifdeclaración. Esto se ejecuta[[ -f "/path/to/file" ]]y&&comprueba el estado de salida del[[comando y ejecuta la siguiente instrucción si ese estado de salida es0(correcto). La siguiente declaración aquí es labreakque cerrará el ciclo actual en el que se encuentra su script.Nota:
bashes muy recomendable que lo uses en[[lugar de[. Tiene todas las capacidades,[pero es mucho más potente y fácil de usar.fuente
[[y simplemente citar su nombre de archivo, es probable que sea interpretado de manera más apropiada por la[[cual es una de las razones por las que se recomienda[.El espacio entre el argumento del archivo y el corchete de cierre es importante.
fuente