Un'altra possibilità è quella di usare command
per passare exec
da 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 command
non 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 X
tty - la sua console. Quando esegui X
un'app da un X
.desktop
file, l'output che genera viene instradato al X
terminale virtuale, che è qualunque sia il tty da cui è stato lanciato X
in 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 Xorg
v1.16 che gli consente di funzionare in una systemd
sessione 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 app
output della console viene instradato /dev/tty$((1+$XDG_VTNR))
piuttosto che il mio xterm
pty. 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 chown
ciò 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 xterm
aperta una finestra, salvare l'output di tty
quando eseguito da lì in una variabile di ambiente e utilizzare quel valore come destinazione per gui
l'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 bash
storia, se ti interessa.