<&-
não é bastante a mesma coisa que < /dev/null
. <&-
fecha fd 0, enquanto < /dev/null
a redireciona do dispositivo /dev/null
, que nunca fornece dados e sempre fornece EOF na leitura. A diferença é principalmente que uma chamada read(2)
de um FD fechado (o caso <&-
) terá erro com EBADF, enquanto uma chamada de um FD redirecionado por nulo não retornará nenhum byte lido (condição de fim de arquivo). Se o seu programa nunca lê stdin, a distinção não importa.
Fechar os FDs é uma boa prática se você estiver fazendo algo em segundo plano, já que um processo em segundo plano será interrompido se ele tentar ler qualquer coisa de TTY. Este exemplo não lida totalmente com tudo o que deveria, no entanto; de preferência, haveria uma invocação de nohup
ou setsid
em algum lugar para desassociar completamente o processo em segundo plano.