O problema
- Usar
sudodentro 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
sudopara 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 .