Outra possibilidade é usar commandpara rebaixar execde um embutido especial para um embutido antigo simples como:
alias shh='command exec >/dev/null 2>&1'
Então agora você pode fazer:
(shh; call some process &)
Acabei de perceber que commandisso não funciona zsh (como parece acontecer na maioria das outras conchas) , mas onde não funciona, você pode:
alias shh='eval "exec >/dev/null 2>&1"'
... o que deve funcionar em qualquer lugar.
De fato, você pode até fazer:
alias shh='command exec >"${O:-/dev/null}" 2>&1'
Então você poderia fazer:
O=./logfile; (shh;echo can anyone hear &)
O=; (shh; echo this\? &)
cat ./logfile
RESULTADO
can anyone hear
Após uma discussão de comentários com o @ vinc17, vale a pena notar que quase toda a saída do console de um aplicativo GUI geralmente se destina ao Xstyty - seu console. Quando você executa um Xaplicativo a partir de um X .desktoparquivo, a saída gerada é roteada para Xo terminal virtual - que é o tty de onde você iniciou X. Eu posso endereçar esse número tty com $XDG_VTNR.
Estranhamente - e talvez porque eu comecei a usar startx- não consigo mais escrever /dev/tty$XDG_VTNR. Isso também pode (como eu acho mais provável) ter algo a ver com as mudanças drásticas e recentes recentes implementadas na Xorgv1.16, que permitem que ela seja executada em uma systemdsessão de usuário em vez de exigir privilégios de root .
Ainda assim, eu posso fazer:
alias gui='command exec >/dev/tty$((1+$XDG_VTNR)) 2>&1'
(gui; some x app &)
Agora, toda some x appa saída do console está sendo encaminhada para o pty /dev/tty$((1+$XDG_VTNR))do meu xterm. Posso obter a última página disso a qualquer momento, como:
fmt </dev/vcs$((1+$XDG_VTNR))
Provavelmente, é uma boa prática dedicar algum terminal virtual para registrar a saída de qualquer maneira. /dev/consolegeralmente já está reservado para isso, embora você possa preferir não fazer o chownque é provavelmente necessário para que você possa escrever alegremente. Você pode ter alguma função que permite fazer printk- o que é basicamente imprimir /dev/console- e, portanto, poderia usá-lo dessa maneira, suponho.
Outra maneira de fazer isso seria dedicar um pty a esses propósitos. Você pode, por exemplo, manter uma xtermjanela aberta, salvar a saída ttyquando executada a partir daí em uma variável de ambiente e usar esse valor como destino da guisaída da. Dessa forma, todos os logs seriam roteados para uma janela de log separada, que você poderia percorrer se quisesse.
Certa vez, escrevi uma resposta sobre como algo semelhante poderia ser feito com a bashhistória, se você estiver interessado.