O problema
- Usar
sudo
dentro de um script geralmente não faz o que você espera (veja o link do Chris Digital: “ Como eu corro? este comando sudo dentro de um script? ”). - O envio de
sudo
para o segundo plano não funcionará (correta e confiável), se você precisar fornecer uma senha.
A solução
Recupere o ID do processo dentro do processo gerado por sudo
. Se você usa exec
, nem precisa usar pgrep -P
como uma muleta. Crie um script de shell, diga pid-badblocks.sh
:
#!/bin/sh
echo $$
exec badblocks -o "$2" "$1"
Torne-o executável e chame-o com:
sudo ./pid-badblocks.sh <DEVICE> <OUTPUT>
Isso funciona porque exec
substitui o processo atual por badblocks
(nesse caso), mantendo o mesmo ID de processo. Podemos, portanto, imprimir o ID do processo do shell antes de invocar badblocks
.