Entrada de Stdin para um comando com nohup

3

de link

nohup runs the given command with hangup signals ignored, so that the command can continue running in the background after you log out.

Synopsis: nohup command [arg]...

If standard input is a terminal, redirect it so that terminal sessions do not mistakenly consider the terminal to be used by the command.

  1. Por que precisamos fazer isso:

    Make the substitute file descriptor unreadable, so that commands that mistakenly attempt to read from standard input can report an error.

  2. O redirecionamento stdin não é feito de um arquivo feito por nohup command [arg]... 0<myfile ? porque 0>/dev/null ?

    This redirection is a GNU extension; programs intended to be portable to non-GNU hosts can use nohup command [arg]... 0>/dev/null instead.

por Tim 27.02.2016 / 23:37

1 resposta

2

Imagine que você está tentando executar um script complexo com nohup. Você pode detectar se ele tenta ler stdin redirecionando stdin para um descritor de arquivo que não pode ser lido. Veja estes dois exemplos: primeiro 0</dev/null :

rm nohup.out
nohup sh -c 'head -1' 0</dev/null
echo $?
cat nohup.out 

O arquivo nohup.out está vazio e o código de retorno ( $? ) do script é 0, ou seja, ok, já que o script acabou de ler o fim do arquivo. Agora tente o mesmo script com 0>/dev/null ie 0 aberto apenas para a saída :

rm nohup.out
nohup sh -c 'head -1' 0>/dev/null
echo $?
cat nohup.out 

Isso fornece a mensagem de erro em nohup.out de

head: error reading 'standard input': Bad file descriptor

e o código de saída é 1, falha. Isto é presumivelmente mais útil para você. Você também pode obter o mesmo efeito fechando stdin com 0<&- :

rm nohup.out
nohup sh -c 'head -1' 0<&-
echo $?
cat nohup.out 
    
por 28.02.2016 / 10:18