O que significa "</ dev / null"?

16

Eu entendo > /dev/nullredireciona coisas para as /dev/nullquais age como um buraco negro. No entanto, eu não entendo o que < /dev/nullsignifica. Eu vi um script escrito assim:

nohup myprogram > foo.out 2> foo.err < /dev/null &

Então, o que significa < /dev/nullo código acima?

aqui está um exemplo em que é sugerido

Qian Chen
fonte
Possível duplicata de Quais são os operadores de controle e redirecionamento do shell?   Além disso, suspeitamente semelhante ao O que <&-faz?
G-Man diz 'Reinstate Monica'

Respostas:

19

Ele garante que todos os fluxos de E / S sejam contabilizados / ocupados.

Dessa forma, o processo em segundo plano não tem nada "ligado" ao terminal, para que você possa prosseguir com seus negócios sem que seu programa tente ler no TTY, o que causaria a interrupção do terminal.

Nesse caso, como você está iniciando o processo através do ssh a partir de um script de shell, garante que o script possa se mover sem ônus.

user3276552
fonte
Ele pressupõe que o meu programa receba alguma entrada, mas, neste caso, não alimenta o meu programa como entrada?
Qian Chen
Obrigado. Eu entendo todo o resto, exceto o < /dev/null.
Qian Chen
Então, qual é a diferença entre o código e o mesmo código sem < /dev/null?
Qian Chen
Na verdade, eu li o código aqui: stackoverflow.com/questions/29142/…
Qian Chen
2
feliz que ajudou! desculpe pela demora; o contexto ajudou, obrigado! - nota lateral: vou excluir um monte de meus comentários em um ou dois minutos, agora que as coisas estão acertadas, parece confuso para quem vê
#
12

program </dev/nullsignifica que ele programestá usando seu argumento de entrada (pode ser um parâmetro de entrada para uma opção ou pode ser um arquivo de entrada para operar) através do descritor de arquivo 0, ou seja, STDIN, do arquivo /dev/null.

Como você já sabe, /dev/nullnão contém nada, ele notificará o EOF (Fim do arquivo) após a leitura, para que qualquer programa que receba entrada /dev/nullredirecione basicamente nada como argumento de entrada.

heemail
fonte
Então, existe alguma diferença em deixar de < /dev/nullfora? Basta escrever comonohup myprogram > foo.out 2> foo.err &
Qian Chen
11
@ElgsQianChen Isso depende do seu ... o programque ele quer como STDIN? Alguns programas podem torná-lo obrigatório, então você precisa colocar algo como STDIN, pode ser o caso aqui que você acabou de usar /dev/nullcomo STDIN e deixar o programa fazer o processamento e colocar STDOUT e STDERR nos arquivos mencionados ..
heemayl
Isso evita efetivamente que qualquer entrada bloqueie o processo e apenas alimenta nada a qualquer solicitação de entrada?
Qian Chen
11
@ElgsQianChen Ele irá bloquear o descritor de arquivo 0, ou seja, STDIN, para que você não possa passar mais nenhuma entrada por isso ... se não houver outro FD configurado para receber a entrada, você não poderá fornecer mais nenhuma entrada ao programa.
heemayl