Eu pareço estar "perdendo" este prompt. O que está acontecendo?

2

Eu ssh em um servidor de nuvem do Ubuntu 12.04 e inicio um servidor web como este (w / bash):

$ nohup python tserver.py &
[2] 2122
$ nohup: ignoring input and appending output to 'nohup.out'

Depois de executar esse comando, o prompt desaparece. Há apenas uma linha em branco. Eu posso obter o meu prompt de volta pressionando "enter" - ou seja, depois que eu apertei enter eu vejo $ novamente. Mas eu quero script alguns desses comandos (ligar algumas instâncias diferentes do servidor web). Então eu não quero script algo como "enviar comando enter". O que está acontecendo aqui? Por que eu perco meu aviso? Como eu escrevo uma série de tais comandos?

    
por bernie2436 23.07.2014 / 16:06

2 respostas

4

Você está fazendo o backup do aplicativo e o aplicativo está gerando saída. Seu prompt ainda está lá, só tem material extra sendo mostrado.

Por exemplo:

$ ( sleep 1 && echo hello ) &
[1] 24764
$ █

E depois de um atraso de 1 segundo, recebo:

$ ( sleep 1 && echo hello ) &
[1] 24764
$ hello
█

O echo apenas grava a saída para o seu terminal e aparece onde seu cursor está atualmente. O shell não sabe que a saída foi mostrada. Você pode continuar digitando como se essa saída não estivesse lá (só fica difícil de ler).

No entanto, uma solução limpa para isso seria redirecionar a saída:

nohup python tserver.py >/dev/null 2>&1 &
    
por 23.07.2014 / 16:21
1

Embora você tenha iniciado o programa em segundo plano, declarando & , a saída do processo em segundo plano ainda é direcionada para o stdout do seu terminal atual.

Isso significa que seu prompt é substituído por algo como echo '\r\n' (substitui a linha atual no caso de o próximo prompt desaparecer por completo) ou echo "Someotherstuff" (imprime Someotherstuff na frente do seu prompt e vai para a próxima linha do seu terminal).

Se você pressionar ENTER , você apenas digitará uma nova linha, o que faz com que o seu prompt seja impresso novamente.

    
por 23.07.2014 / 16:22