Acontece que o comando que você está executando em nohup
nunca grava em stdout ou stderr e que você não está enviando nenhuma entrada para ele. Mas nohup
não tem como saber disso, então ele diz que qualquer entrada seria descartada e qualquer saída seria gravada em nohup.out
.
Para evitar isso, redirecione stdin, stdout e stderr de nohup
para /dev/null
.
ssh -t esolve@hostname 'sudo nohup bash -c "ls > log 2>&1 &" </dev/null >/dev/null 2>/dev/null'
Quanto a |&
, do manual do bash :
The format for a pipeline is
[time [-p]] [!] command1 [ [| or |&] command2 …]
The output of each command in the pipeline is connected via a pipe to the input of the next command. That is, each command reads the previous command’s output. This connection is performed before any redirections specified by the command.
If
|&
is used, the standard error ofcommand1
is connected tocommand2
’s standard input through the pipe; it is shorthand for2>&1 |
.
Esta é uma extensão do bash, também presente no zsh.