A logo showing the text blog.marcnuri.com
English
Inicio»Operaciones»Bash: Cómo esperar hasta que un archivo exista

Entradas Recientes

  • Fabric8 Kubernetes Client 7.2.0 está disponible!
  • Conectarse a un servidor MCP con JavaScript y AI SDK
  • Conectarse a un servidor MCP con JavaScript y LangChain.js
  • El Futuro de las Herramientas para Desarrolladores en la era de la IA
  • Conectarse a un servidor Model Context Protocol (MCP) con Java y LangChain4j

Categorías

  • Antiguo
  • Front-end
  • Go
  • Herramientas
  • Industria y negocios
  • Inteligencia Artificial
  • Java
  • JavaScript
  • Operaciones
  • Personal
  • Proyectos personales

Archivos

  • mayo 2025
  • abril 2025
  • marzo 2025
  • febrero 2025
  • enero 2025
  • diciembre 2024
  • noviembre 2024
  • agosto 2024
  • junio 2024
  • mayo 2024
  • abril 2024
  • marzo 2024
  • febrero 2024
  • enero 2024
  • diciembre 2023
  • noviembre 2023
  • octubre 2023
  • septiembre 2023
  • agosto 2023
  • julio 2023
  • junio 2023
  • mayo 2023
  • abril 2023
  • marzo 2023
  • febrero 2023
  • enero 2023
  • diciembre 2022
  • noviembre 2022
  • octubre 2022
  • agosto 2022
  • julio 2022
  • mayo 2022
  • marzo 2022
  • febrero 2022
  • enero 2022
  • diciembre 2021
  • noviembre 2021
  • octubre 2021
  • septiembre 2021
  • agosto 2021
  • julio 2021
  • diciembre 2020
  • octubre 2020
  • agosto 2020
  • junio 2020
  • mayo 2020
  • marzo 2020
  • febrero 2020
  • enero 2020
  • noviembre 2019
  • octubre 2019
  • julio 2019
  • diciembre 2018
  • agosto 2018
  • julio 2018
  • junio 2018
  • mayo 2018
  • marzo 2018
  • febrero 2018
  • noviembre 2017
  • octubre 2017
  • agosto 2017
  • julio 2017
  • enero 2017
  • julio 2016
  • enero 2016
  • diciembre 2015
  • noviembre 2015
  • diciembre 2014
  • marzo 2014
  • febrero 2011
  • junio 2008
  • mayo 2008
  • abril 2008
  • enero 2008
  • junio 2007
  • mayo 2007
  • abril 2007
  • marzo 2007

Bash: Cómo esperar hasta que un archivo exista

2023-09-19 en Operaciones etiquetado BASH / Shell / Linux / Consejo breve por Marc Nuri | Última actualización: 2023-09-19
English version

Introducción

Cuándo trabajas con scripts Bash, a menudo te encuentras con escenarios en los que necesitas esperar a que se cree o esté disponible un archivo/fichero. Esto puede ser mientras esperas a que se descargue un archivo, se genere por un proceso diferente, o cualquier otra situación en la que quieras asegurarte de que un archivo existe antes de continuar.

En este artículo, exploraremos cómo lograr esta tarea de forma eficiente en Bash.

El script Bash de ejemplo

Comencemos con un script Bash sencillo que demuestra el concepto básico. El script esperará continuamente hasta que exista un archivo especificado y luego imprimirá un mensaje en la consola:

until [ -e /tmp/file.txt ]; do
  sleep 1
done
echo File exists

Comenzamos usando la construcción de bucle until para verificar una condición.

La condición del bucle ([ -e /tmp/file.txt ]) se ejecutará mientras devuelva un estado de salida distinto de cero. El cuerpo del bucle (sleep 1) también se ejecutará mientras los comandos de prueba devuelvan un estado de salida distinto de cero. El bucle finaliza una vez que el comando sale con un estado de salida cero.

Para los comandos de prueba de condición, estamos usando la expresión condicional -e de Bash para verificar si el archivo existe (puede ser un archivo o un directorio).

También podríamos aprovechar las siguientes expresiones condicionales:

  • -f para verificar si el archivo existe y es un archivo regular.
  • -d para verificar si el archivo existe y es un directorio.
  • -s para verificar si el archivo existe y no está vacío.

Una vez que salimos del bucle, imprimimos un mensaje en la consola: File exists.

Este script es extremadamente útil tal y como está. No obstante, por múltiples motivos, el archivo podría no crearse nunca haciendo que el script espere para siempre.

Veamos cómo mejorar el script para evitar esta situación.

Cómo esperar a que se cree un archivo con timeout

El siguiente script contiene la misma lógica que el anterior con la adición de un timeout.

t=0
until [ -e /tmp/file.txt ] || (( t++ >= 5 )); do
  sleep 1
done
[ -e /tmp/file.txt ] && echo File exists || echo Timeout

El script comienza definiendo una variable t que se utilizará para contar el número de iteraciones. La variable se inicializa a 0.

Modificamos el bucle until para incluir una condición adicional. Ahora, el bucle se ejecutará mientras el archivo no exista y el número de iteraciones sea menor que 5. Una vez que el archivo existe o el número de iteraciones es mayor o igual que 5, el bucle terminará.

La consola imprimirá un mensaje dependiendo de la existencia del archivo o del timeout.

Con esta modificación, el script se vuelve más robusto, asegurando que no esperará indefinidamente a un archivo que podría no crearse nunca.

En resumen, esperar a que un archivo exista en Bash es una tarea común, y entender cómo agregar un timeout puede hacer que tus scripts sean más resistentes en escenarios del mundo real.

¡Feliz scripting!

Twitter iconFacebook iconLinkedIn iconPinterest iconEmail icon

Navegador de artículos
Windows 11: Cómo habilitar la cuenta de Administrador/AdministratorGatsby 5: Cómo consultar datos de múltiples fuentes con GraphQL
© 2007 - 2025 Marc Nuri