o uso de / dev / null & na linha de comando

9

Eu tentei executar um programa java de exemplo usando a seguinte linha de comando. No entanto, não sei para que é utilizada a parte à direita < /dev/null & ?

java   -cp  /home/weka.jar weka.classifiers.trees.J48 –t train_file  >& log < /dev/null &
    
por user297850 30.12.2011 / 03:51

2 respostas

18

< /dev/null é usado para enviar instantaneamente o EOF ao programa, para que ele não espere pela entrada ( /dev/null , o dispositivo nulo, é um arquivo especial que descarta todos os dados gravados nele, mas relata que o gravação operação bem sucedida, e não fornece dados para qualquer processo que lê a partir dele, produzindo EOF imediatamente). & é um tipo especial de separador de comando usado para descrever o processo anterior.

Sem saber que o programa está sendo chamado, não sei diretamente por que é necessário executá-lo dessa maneira.

    
por 30.12.2011 / 04:47
4

</dev/null desconecta a entrada do programa do terminal. Alguns programas reagem de maneira diferente, dependendo de como sua entrada padrão está conectada. Com o redirecionamento </dev/null , o programa pode dizer que sua entrada não vem de um terminal e receberá uma indicação de fim de arquivo imediatamente se tentar ler a partir de sua entrada padrão.

O lone & no final faz com que o programa seja executado em segundo plano. Isso significa que você recebe um prompt imediatamente. Sem o & , você obteria um aviso de shell apenas quando o programa terminar de executar.

Observe que o & independente não está relacionado a >& . >& é um operador de redirecionamento (em tcsh, bash e zsh) que redireciona a saída padrão do programa e o erro padrão do programa para o nome do arquivo especificado após o operador (aqui log ).

Em outras palavras, o que o shell faz quando vê essa linha de comando é:

  • Inicie um processo em segundo plano. No processo de segundo plano:
    • Conecte a entrada padrão a /dev/null (o dispositivo nulo ).
    • Conecte a saída padrão e o erro padrão ao arquivo chamado log (criando o arquivo, se ainda não existir, e truncando-o, se existir).
    • Procure um arquivo executável chamado java no $PATH .
    • Execute esse arquivo com os 5 argumentos -cp , /home/weka.jar , weka.classifiers.trees.J48 , –t , train_file '.
por 30.12.2011 / 23:20