Eu tenho um script como:
#!/bin/bash
if findmnt --source UUID=309689b5-ea5c-4175-84c7-192631553eab --source PARTLABEL=WDPurple8TB --mountpoint /media/ismail/WDPurple8TB --types ext4 --noheadings; then
udisksctl unmount -b /dev/disk/by-label/WDPurple8TB
udisksctl power-off -b /dev/disk/by-label/WDPurple8TB
echo "Power-Off /dev/disk/by-label/WDPurple8TB"
fi
if findmnt --source UUID=151cf7f0-461a-416f-8e44-63d799418958 --source PARTLABEL=WDPurple6TB --mountpoint /media/ismail/WDPurple6TB --types ext4 --noheadings; then
udisksctl unmount -b /dev/disk/by-label/WDPurple6TB
udisksctl power-off -b /dev/disk/by-label/WDPurple6TB
echo "Power-Off /dev/disk/by-label/WDPurple6TB"
fi
Aqui, seria melhor se ambos os blocos de código if-fi fossem executados em paralelo. No entanto, o stdout & stderr dentro do bloco de código if-fi deve vir em grupo (quero dizer que a saída deles não deve se sobrepor). O que eu quero dizer é:
o stdout & stderr das três linhas seguintes deve aparecer depois de atingirmos o final do primeiro bloco de código if-fi.
udisksctl unmount -b /dev/disk/by-label/WDPurple8TB
udisksctl power-off -b /dev/disk/by-label/WDPurple8TB
echo "Power-Off /dev/disk/by-label/WDPurple8TB"
o stdout & stderr das três linhas a seguir deve aparecer depois de atingirmos o final do segundo bloco de código if-fi.
udisksctl unmount -b /dev/disk/by-label/WDPurple6TB
udisksctl power-off -b /dev/disk/by-label/WDPurple6TB
echo "Power-Off /dev/disk/by-label/WDPurple6TB"
Como posso conseguir isso?
Para serializar essas saídas (e erros), você teria que salvar pelo menos uma delas temporariamente:
Aqui, usando
zsh
a=(...)
forma de substituição de processo para criar arquivos temporários. Com sh ou bash, você pode usarmktemp
ou qualquer outro comando disponível em seu sistema para criar arquivos temporários com segurança.Estritamente, falar
=(cmd)
não deve ser usado assim, pois o zsh exclui o arquivo temporário assim que o comando onde ele é expandido termina. Aqui nós o recriamos mais tarde com o mesmo caminho, portanto não é estritamente seguro, pois há uma pequena janela durante a qual o arquivo pode ter sido recriado como link simbólico por um agente mal-intencionado.Para qualquer número de desmontagens paralelas, poderíamos fatorizar um pouco as coisas. Também podemos abrir fds para os arquivos temporários a serem excluídos, para que sejam excluídos desde o início, abordando o problema acima e classificando a limpeza:
(não testado)
Isso funcionaria:
Ou: