Un'altra possibilità è quella di usare commandper passare execda un builtin speciale ad un semplice vecchio build come:
alias shh='command exec >/dev/null 2>&1'
Quindi ora puoi fare:
(shh; call some process &)
Ho appena notato che commandnon funziona zsh (come sembra fare nella maggior parte delle altre shell) , ma dove invece non funziona puoi invece fare:
alias shh='eval "exec >/dev/null 2>&1"'
... che dovrebbe funzionare ovunque.
In effetti, potresti persino fare:
alias shh='command exec >"${O:-/dev/null}" 2>&1'
Quindi potresti fare:
O=./logfile; (shh;echo can anyone hear &)
O=; (shh; echo this\? &)
cat ./logfile
PRODUZIONE
can anyone hear
Dopo una discussione di commento con @ vinc17, vale la pena notare che quasi tutto l'output della console di un'app GUI è generalmente destinato a Xtty - la sua console. Quando esegui Xun'app da un X .desktopfile, l'output che genera viene instradato al Xterminale virtuale, che è qualunque sia il tty da cui è stato lanciato Xin primo luogo. Posso indirizzare questo numero tty con $XDG_VTNR.
Stranamente però - e forse perché ho appena iniziato a usare startx- non riesco più a scrivere /dev/tty$XDG_VTNR. Questo potrebbe anche (come penso sia più probabile) avere qualcosa a che fare con il cambiamento molto recente e drastico implementato con Xorgv1.16 che gli consente di funzionare in una systemdsessione utente piuttosto che richiedere i privilegi di root .
Tuttavia, posso fare:
alias gui='command exec >/dev/tty$((1+$XDG_VTNR)) 2>&1'
(gui; some x app &)
Ora tutto l' some x appoutput della console viene instradato /dev/tty$((1+$XDG_VTNR))piuttosto che il mio xtermpty. Posso ottenere l'ultima pagina di questo in qualsiasi momento come:
fmt </dev/vcs$((1+$XDG_VTNR))
Probabilmente è buona prassi dedicare comunque un terminale virtuale per registrare l'output. /dev/consoleè generalmente già riservato per questo, anche se potresti preferire di non fare chownciò che è probabilmente necessario per poterti scrivere allegramente. Potresti avere una funzione che ti consente di fare un printk- che sostanzialmente sta stampando su /dev/console- e quindi potrei usarlo in questo modo suppongo.
Un altro modo per farlo sarebbe quello di dedicare un po ' a tali scopi. Ad esempio, è possibile mantenere xtermaperta una finestra, salvare l'output di ttyquando eseguito da lì in una variabile di ambiente e utilizzare quel valore come destinazione per guil'output di. In questo modo tutti i registri verrebbero instradati verso una finestra di registro separata, che è quindi possibile scorrere se desiderato.
Una volta ho scritto una risposta su come una cosa simile potrebbe essere fatta con la bashstoria, se ti interessa.