Um problema com seu primeiro comando é que você redireciona o stderr para onde está o stdout (se você alterou o $ para a & conforme sugerido no comentário) e, em seguida, o redirecionou para algum arquivo de log, mas isso não puxa o stderr redirecionado . Você deve fazer isso na outra ordem, primeiro envie stdout para onde deseja que ele vá e, em seguida, envie stderr para o endereço em que stdout está
some_cmd > some_file 2>&1 &
e então você pode ativar o & on para enviá-lo para segundo plano. Os trabalhos podem ser acessados com o jobs
comando jobs
mostrará os trabalhos em execução e os numerará. Você poderia falar sobre os trabalhos usando um% seguido do número mais kill %1
ou menos.
Além disso, sem o & no final, você pode suspender o comando Ctrlz, use o bg
comando para colocá-lo em segundo plano e fg
trazê-lo de volta ao primeiro plano. Em combinação com o jobs
comando, isso é poderoso.
para esclarecer a parte acima sobre a ordem em que você escreve os comandos. Suponha que stderr seja o endereço 1002, stdout seja o endereço 1001 e o arquivo seja 1008. O comando lê da esquerda para a direita, então a primeira coisa que vê no seu é 2>&1
que move o stderr para o endereço 1001, e depois vê o > file
que move o stdout para 1008, mas mantém o stderr em 1001. Ele não puxa tudo que aponta para 1001 e o move para 1008, mas simplesmente referencia o stdout e o move para o arquivo.
Por outro lado, ele move o stdout para 1008 e, em seguida, move o stderr para o ponto que o stdout está apontando, 1008 também. Dessa forma, ambos podem apontar para o único arquivo.
2>$1
provavelmente deveria ser2>&1
.