impede que o programa influencie o terminal?

2

Algum programa iniciado em um script grande está fazendo stty -echo . Eu não tenho certeza qual programa é assim que eu tenho que tentar encontrá-lo por tentativa e erro. </dev/null 2>&1 | tee /dev/null é suficiente para impedir que os programas acessem o terminal ou existe outra maneira de acessar o terminal?

Na verdade, não consegui determinar qual programa acessa o terminal (as tentativas de strace do script inteiro produziram um arquivo de 17 MB sem tcsetattr , então presumo que as modificações do terminal sejam apenas gravações de caracteres de controle). O problema também era não-determinístico; Às vezes, isso interferia no terminal e às vezes não.

Colocar o seguinte prelúdio no script pareceu impedir a interferência com o terminal não resolve o problema. No entanto, não está claro por que isso não resolve o problema: os processos ainda estão acessando o terminal através de /dev/tty ou os códigos de escape gravados pelos programas ainda estão sendo despejados no terminal por cat .

MKTEMP="$(mktemp)"
mkfifo "$MKTEMP".fifo
(
  set +o xtrace
  cat "$MKTEMP".fifo
  rm -f "$MKTEMP".fifo "$MKTEMP"
) </dev/null 2>&1 &
exec 1>"$MKTEMP".fifo
exec 2>&1
exec 0</dev/null
    
por DepressedDaniel 20.12.2016 / 22:31

1 resposta

2

Dilema resolvido. O problema era uma sudo -g em segundo plano pedindo a senha no terminal, mesmo que a conta atual não tenha senha. Isso parece ser um bug no sudo ; ele não deve pedir uma senha se a conta não tiver senha (e isso não acontece quando você muda de usuário, só faz isso quando muda de grupo):

ubuntu@ubuntu:~$ sudo -u nobody ls
Desktop  Documents  Downloads  Music  Pictures  Public  Templates  Videos
ubuntu@ubuntu:~$ sudo -g nogroup ls
[sudo] password for ubuntu: 
ubuntu@ubuntu:~$ 

A solução alternativa era adicionar NOPASSWD: a sudoers , o que fez com que o problema desaparecesse.

O não-determinismo foi devido a sudo eventualmente permitindo o comando na próxima vez que você pressionou enter no terminal, e não pedindo uma senha novamente por algum tempo.

    
por 21.12.2016 / 03:27

Tags