Outra possibilidade é usar command
para rebaixar exec
de 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 command
isso 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 X
styty - seu console. Quando você executa um X
aplicativo a partir de um X
.desktop
arquivo, a saída gerada é roteada para X
o 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 Xorg
v1.16, que permitem que ela seja executada em uma systemd
sessã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 app
a 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/console
geralmente já está reservado para isso, embora você possa preferir não fazer o chown
que é 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 xterm
janela aberta, salvar a saída tty
quando executada a partir daí em uma variável de ambiente e usar esse valor como destino da gui
saí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 bash
história, se você estiver interessado.