5 votos

En un script de shell, ¿cómo puedo esperar a que un volumen esté disponible?

Esto genera un error de que file_on_volume_foo.txt no está disponible:

open /path/foo.dmg
open /Volumes/foo/file_on_volume_foo.txt

El archivo ... no existe.

8voto

yoliho Puntos 340

El comando que estás buscando es wait4path y es parte de macOS

La página del manual dice

El programa wait4path simplemente comprueba si la ruta dada existe, y si es así, se detiene. De lo contrario, duerme hasta que se actualice la tabla de montaje y vuelve a comprobar. El programa se ejecutará en bucle indefinidamente hasta que la ruta aparezca en el espacio de nombres del sistema de archivos.

Entonces, sabiendo eso:

wait4path /Volumes/foo/file_on_volume_foo.txt
open /Volumes/foo/file_on_volume_foo.txt

6voto

Puedes usar hdiutil en lugar de hacer que Finder monte la imagen a través de open, esto esperará a que la imagen se monte:

hdiutil attach /path/to/dmg
open /Volumes/foo/file.txt

2voto

Joel Puntos 112

Creo que la secuencia de comandos exacta depende de dónde se encuentra /Volumes/foo. Si está ubicado en algún lugar de su Macintosh HD, supongo que una de las otras respuestas podría funcionar mejor. Si está en una unidad de red (NAS, Samba, etc), aquí hay un script de shell que podría resultarte útil:

Usando test ([ ]):

#!/bin/bash

TF="/Volumes/foo"

if [ ! -f "$TF/file_on_volume_foo.txt" ]; then
   echo "no se pudo encontrar el archivo; intentando de nuevo en 5 segundos..."
   sleep 5
   if [ ! -f "$TF/file_on_volume_foo.txt" ]; then
      echo "El archivo solicitado no está disponible"
   else
      echo "Se encontró el archivo, está DISPONIBLE"
   fi
fi

El objetivo del sleep 5 y la reevaluación de la presencia del archivo es darle a su sistema un poco más de tiempo, una segunda oportunidad, para volver a conectar/montar.

También puedes poner una instrucción open en el script. Eso (por lo que sé) abrirá una ventana del Finder cuando se encuentre el archivo.

También podrías usar el comando stat - si por ejemplo, no estás seguro de cuál es el sistema de archivos. Usando un ejemplo de mi sistema, donde un archivo reside en un NAS Synology:

% TF="/Volumes/rpi_share/savedurl/id_value.txt" 
% stat -f $TF 

  File: "/Volumes/rpi_share/savedurl/id_value.txt"
    ID: 360000140000001e Namelen: ?       Type: smbfs
Block size: 1024       Fundamental block size: 1024
Blocks: Total: 28107205512 Free: 25002647236 Available: 25002647236
Inodes: Total: 28107205510 Free: 25002647236

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X