Sempre há a solução de baixa tecnologia, se você souber antecipadamente o nome do dispositivo:
while [ ! -e /dev/whatever ] ; do
sleep .1 # you can sleep for less than a second with coreutils sleep
# optionally add a counter & timeout
done
Estou criando uma partição com o sfdisk no linux. Após a criação da partição, quero criar um sistema de arquivos.
Isso falha com o mkfs.ext3 não encontrando a partição:
echo ",,L" | sfdisk $DEVICE
mkfs.ext3 $PARTITION
Mas isso funciona:
echo ",,L" | sfdisk $DEVICE
sleep 1
mkfs.ext3 $PARTITION
Eu suspeito, ou o kernel leva algum tempo para atualizar suas estruturas de dados internas, ou meu script é agendado novamente, antes que o udev tivesse a chance de criar o nó do dispositivo.
Como posso esperar exatamente até que o nó do dispositivo seja criado? Com cada tempo constante, pode haver um sistema sob carga, onde esse tempo não está garantido.
Sempre há a solução de baixa tecnologia, se você souber antecipadamente o nome do dispositivo:
while [ ! -e /dev/whatever ] ; do
sleep .1 # you can sleep for less than a second with coreutils sleep
# optionally add a counter & timeout
done
Mais tarde, mas melhor que nunca. Para completar.
udevadm settle --timeout=15 --exit-if-exists=$PARTITION
Tente usar inotifywait
(de inotify-tools) no nó do dispositivo. o diretório /dev
.