Comportamento ligeiramente diferente do Linux Se dermos '&' antes do redirecionamento do io '' e depois do redirecionamento

0

Eu estava começando o jboss recentemente em segundo plano no Linux e vi que se você executasse o comando da seguinte forma:

nohup ./startjboss.sh > server.log &

A saída é:

[1] 18835
[root@cnt5-01b downloads]#

O terminal do próximo comando aparece diretamente.

No entanto, se eu executar o comando da seguinte forma:

nohup ./startjboss.sh & > server.log

Então a saída é:

[1] 19223
[root@cnt5-01b downloads]# nohup: appending output to 'nohup.out'

Então, quando eu pressiono enter, ele retorna para:

[root@cnt5-01b downloads]#

qual é o terminal onde eu posso escrever o próximo comando.

Por que existe uma diferença no comportamento (um Enter extra é necessário)? Isso é uma coisa muito pequena, nem mesmo um problema; mas eu só quero saber.

    
por Gaurav Fotedar 10.12.2014 / 15:05

2 respostas

1

Quando você coloca o &, você está dizendo ao shell para executar o que o precede em segundo plano e continuar com um novo comando.

Quando você coloca no final da linha, não há comando depois, então o shell retorna ao modo interativo.

Quando você coloca no meio, o shell interpreta o resto da linha como um novo comando. Esse comando redireciona a saída padrão de nada para server.log. Como você não está redirecionando a saída do nohup, agora você o vê no terminal. Como o shell já havia redesenhado seu PS1 antes, você vê essa linha de saída como se fosse um comando, mas é simplesmente saída de um trabalho em segundo plano. Você pode digitar seu novo comando sem pressionar enter antes (embora não esteja claro quando você o lê mais tarde).

    
por 10.12.2014 / 19:25
0

Bem, basicamente, quando você executa um comando com & depois, você está perdendo alguma funcionalidade.

Tome isso como um exemplo, faça um script que não faça nada além de retornar 2 por exemplo.

  • execute o script normalmente, emita echo $? e você verá a saída 2 .
  • execute o script com & depois, execute echo $? e você verá a saída 0 .

Além disso, ao executar nohup ./startjboss.sh & > server.log , se você verificar o arquivo server.log , verá que está vazio, porque a saída do processo em segundo plano será 0 na finalização bem-sucedida, mas porque você não t echo em server.log , então nada será gravado em server.log .

    
por 10.12.2014 / 15:29