Problema com o script bash [duplicado]

0

Eu tenho um pequeno problema com um script meu. Eu executo um comando em background usando o sudo e tento recuperar o PID do comando em uma variável.

o código é o seguinte:

#!/bin/bash

sudo badblocks -o $2 $1 & 

PROCESSID=$(pgrep -P $!)

echo $PROCESSID

Eu executei todos os comandos um por um em um shell e funciona bem, mas quando eu inicio o script, ele não funciona. Eu tenho outro comando para obter o PID, como "ps --ppid $! -O pid=", mas também não funciona.

se você tem alguma ideia do porquê?

    
por Didier Chavaroche 01.10.2014 / 15:28

2 respostas

2

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 .

    
por David Foerster 01.10.2014 / 15:59
0

Adivinhando ...

Se cada comando funcionar de forma independente, pode ser que a designação PROCESSID aconteça muito rapidamente.

Tente adicionar 'sleep 3s' depois de 'sudo ...' e veja o que acontece.

    
por Higgs 01.10.2014 / 15:44