Existe uma maneira de evitar que a saída das tarefas em segundo plano cubra a linha de comando em um shell?

4

Eu gostaria de poder executar tarefa (s) no fundo de um shell e não ter sua saída para stdout ou stderr cobrir a linha de comando na parte inferior. Freqüentemente preciso executar outros comandos para interagir com os processos em segundo plano e gostaria de fazer isso a partir do mesmo shell sem ter que abrir outro terminal ou usar o multiplexador para dividir o terminal como uma tela.

O ideal seria que houvesse alguma configuração que eu simplesmente não conheça (normalmente uso o bash ou o ksh), mas um shell ou script novo ou diferente ficaria bem para mim.

Estou aberto a qualquer sugestão e agradeço qualquer ajuda, obrigado.

Editar: Obrigado por todas as suas respostas, mas a minha pergunta foi um pouco incerta. Eu ainda preciso assistir a saída das tarefas em segundo plano como ele sai, gostaria apenas de não cobrir quaisquer novos comandos que eu poderia estar digitando na linha de comando. Idealmente, a saída dos programas em segundo plano seria exibida em todos, menos na linha inferior do shell, deixando-me livre para construir novos comandos nessa linha.

Isso seria semelhante à tela em execução com uma divisão horizontal em que a janela inferior tinha apenas 1 a 2 linhas de altura, mas a utilização da tela apresenta as seguintes desvantagens para os meus propósitos:

  • Eu não preciso / quero que os processos sobrevivam após meu logout
  • É preciso um ou dois comandos extras para configurar (mesmo que o tamanho da divisão e da janela seja feito em um arquivo .screenrc)
  • Gostaria de poder usar os comandos de controle de tarefas do shell sem alternar entre janelas de tela (isto é, jobs, bg, fg, kill% 1 pelo menos no caso de bash)

Obrigado novamente pela sua ajuda, esta foi a minha primeira pergunta e fiquei impressionado com a velocidade e quantidade das respostas!

    
por Chris Pick 21.03.2010 / 00:50

4 respostas

2

No Bash & ksh, você pode fazer com que todas as stdout desapareçam anexando 1>/dev/null ao comando.
Para csh e tcsh é $1>/dev/null

    
por 21.03.2010 / 01:24
1
mycommand > /dev/null 2>&1

Isto irá redirecionar stderror (2) para stdout (1) para / dev / null

    
por 21.03.2010 / 01:46
0

Na página da Wikipédia 'nohup' para expandir as respostas já dadas ...

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

link

nohup permite que o processo continue depois que você terminar o shell, caso precise fazer isso. O '>' e '<' redirecionar a saída para um 'arquivo' qualquer que seja o arquivo. Em alguns dos exemplos, dado que o arquivo é apenas / dev / null. O '&' diz ao shell para colocar o processo em segundo plano e continuar aceitando a entrada, já que o OP provavelmente já sabe.

    
por 21.03.2010 / 01:55
0

Dependendo da segurança do administrador do sistema em relação à sua segurança, você pode executar o comando usando 'at'.

 $ at now
 date 
 id
 ^D
 $ 

É claro que a saída (se houver) seria enviada por e-mail para você.

    
por 21.03.2010 / 07:22