Como posso esperar no script .profile até que todos os dispositivos estejam montados?

0

No meu script .profile eu quero exportar uma variável se um hardisk USB externo estiver montado. Eu preciso dessa variável em scripts Perl posteriores para determinar se o dispositivo está montado. Especialmente, se o dispositivo não estiver montado, os scripts posteriores se comportarão de maneira diferente.

Como esses scripts Perl também são executados em um ambiente Windows, não posso simplesmente verificar a existência do diretório quando os scripts são executados. Além disso, o script é executado em máquinas diferentes, algumas das quais às vezes têm disco rígido anexado. Quando o disco rígido estiver conectado, ele não será removido até que a máquina seja desligada.

Além disso, os scripts fazem seu trabalho perfeitamente e eu prefiro não mudá-los.

O dispositivo é montado em /media/rene/DEVICE_NAME .

No meu diretório pessoal, tenho um link simbólico para o ponto de montagem:

ln -s /media/rene/DEVICE_NAME ~/ext_hd

Então, no meu arquivo ~/.script eu tenho o seguinte teste

if [[ -d ~/ext_hd ]]; then
   export device_mounted=yes
fi

Agora, aparentemente, essas linhas são executadas antes de o processo de montagem terminar de montar o disco rígido externo. Assim, a variável device_mounted não é atribuída.

Então, existe uma maneira de esperar que o processo de montagem termine antes de eu executar o teste?

    
por René Nyffenegger 03.02.2018 / 07:54

1 resposta

2

Que tal executar um script como um daemon?

#!/bin/sh
while true; do
    if mountpoint -q /media/rene/DEVICE_NAME; then
        export device_mounted=yes
    else
        unset device_mounted
    fi
    sleep 30
done

Editar:

Com o esclarecimento da sua pergunta editada, podemos simplificar um pouco o script:

#!/bin/sh
while true; do
    if mountpoint -q /media/rene/DEVICE_NAME; then
        export device_mounted=yes
        break
    fi
    sleep 30
done

Guarde em algum lugar como, por exemplo, device-check.sh e torne o script executável:

chmod +x /path/to/device-check.sh

Em seguida, adicione esta linha em ~/.profile :

/path/to/device-check.sh &

O caractere & é essencial. Isso faz com que o script inicie como um processo separado, permitindo que o processo de login continue.

Depois disso, o script inicia no login e verifica a cada 30 segundos se o dispositivo estiver montado. Se / quando o script descobrir que o dispositivo está montado, ele define a variável de ambiente e termina.

    
por Gunnar Hjalmarsson 03.02.2018 / 08:39