Echo enquanto aguarda o prompt do sudo

0

Contexto

Estou usando desta forma de elevar permissões em um script, se não for executado como raiz.

Meu script Bash verifica a presença de um determinado arquivo que ele precisa usar:

if [ $EUID != 0 ]; then
    if [ -f "/foo/bar" ]
    then
        AGE=$(expr 'date +%s' - 'stat -c %Y "/foo/bar"')
        echo "/foo/bar is here, ${AGE}s old"
    else
        echo "/foo/bar not there (yet?)"
    fi

    sudo "$0" "$@"
    exit $?
fi

# the rest of the script, needs /foo/bar

Portanto, se uma não-raiz executar isso e houver o arquivo, a resposta será como /foo/bar is here, 27s old . Caso contrário, a resposta é /foo/bar is not there (yet?) . Em seguida, o prompt sudo é executado.

Agora, a pergunta é: no segundo caso, quando /foo/bar ainda não está pronto, há uma maneira de notificar o usuário quando /foo/bar aparecer? O usuário digitaria a senha e veria "oh o arquivo está lá" ou "melhor esperar antes que eu pressione Return".

Existem duas partes disto, detectam que um arquivo apareceu no sistema de arquivos (não perguntando sobre este), e ecoa algo enquanto o prompt do sudo está ativo .

Pergunta

Estou interessado na segunda parte. É possível escrever algo na saída, acima ou abaixo do prompt do sudo, "assincronamente"?

    
por vektor 28.06.2016 / 11:18

1 resposta

1

Respondendo a segunda parte da pergunta, como escrever mensagens enquanto espera no prompt sudo :

trap '2>/dev/null' CHLD
(sleep 5; echo; echo "New spam has just arrived!") &
MSGPID=$!
sudo -v
wait $MSGPID
trap - CHLD

sleep 5 no subshell simula a mensagem que chega de forma assíncrona. O primeiro echo apenas garante que a mensagem não acabe ao lado do prompt Password: . Ele também funciona ao gravar em stderr em vez de stdout .

O primeiro trap está lá para eliminar as mensagens sobre o status do trabalho em segundo plano. waitpid e o segundo trap cancelam os efeitos do primeiro trap .

Coisas ruins acontecem se o comando no subshell sair antes de ter a chance de retornar um PID significativo (pode acontecer em alguns SOs, esperamos que não seja muito grande atualmente).

    
por 28.06.2016 / 16:42

Tags