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

12

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

java   -cp  /home/weka.jar weka.classifiers.trees.J48 t train_file  >& log < /dev/null &
user297850
fonte

Respostas:

21

< /dev/nullé usado para enviar instantaneamente o EOF ao programa, para que ele não espere pela entrada ( /dev/nullo dispositivo nulo, é um arquivo especial que descarta todos os dados gravados nele, mas informa que a operação de gravação foi bem-sucedida e não fornece dados para qualquer processo que leia a partir dele, produzindo EOF imediatamente). &é um tipo especial de separador de comandos usado para o segundo plano do processo anterior.

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

Chris Down
fonte
6

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

O único &no final faz com que o programa seja executado em segundo plano. Isso significa que você recebe um prompt de shell imediatamente. Sem o &, você receberia um prompt de shell apenas quando o programa concluir a execução.

Observe que o autônomo &não está relacionado >&. >&é 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ê esta linha de comando é:

  • Inicie um processo em segundo plano. No processo em segundo plano:
    • Conecte a entrada padrão ao /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 javano $PATH.
    • Executar esse arquivo com os 5 argumentos -cp, /home/weka.jar, weka.classifiers.trees.J48, –t, train_file`.
Gilles 'SO- parar de ser mau'
fonte