Otra posibilidad es usar commandpara degradar execde una construcción especial a una construcción simple como:
alias shh='command exec >/dev/null 2>&1'
Entonces ahora puedes hacer:
(shh; call some process &)
Acabo de notar que commandno funciona zsh (como parece hacerlo en la mayoría de los otros shells) , pero donde no funciona, puede hacerlo:
alias shh='eval "exec >/dev/null 2>&1"'
... que debería funcionar en todas partes.
De hecho, incluso podrías hacer:
alias shh='command exec >"${O:-/dev/null}" 2>&1'
Entonces podrías hacer:
O=./logfile; (shh;echo can anyone hear &)
O=; (shh; echo this\? &)
cat ./logfile
SALIDA
can anyone hear
Después de una discusión de comentarios con @ vinc17, vale la pena señalar que casi toda la salida de la consola de una aplicación GUI generalmente está destinada a Xsu consola. Cuando ejecuta una Xaplicación desde un X .desktoparchivo, la salida que genera se enruta a Xla terminal virtual, que es cualquier cosa desde la que se inició Xen primer lugar. Puedo abordar este número tty con $XDG_VTNR.
Aunque parezca extraño, y tal vez porque recién comencé a usarlo startx, parece que ya no puedo escribirle /dev/tty$XDG_VTNR. Esto también puede (como creo que es más probable) tener algo que ver con el cambio muy reciente y drástico implementado con Xorgv1.16 que le permite ejecutarse bajo una systemdsesión de usuario en lugar de requerir privilegios de root .
Aún así, puedo hacer:
alias gui='command exec >/dev/tty$((1+$XDG_VTNR)) 2>&1'
(gui; some x app &)
Ahora toda some x appla salida de la consola se enruta en /dev/tty$((1+$XDG_VTNR))lugar de la de mi xtermpty. Puedo obtener la última página de esto en cualquier momento como:
fmt </dev/vcs$((1+$XDG_VTNR))
Probablemente sea la mejor práctica dedicar algún terminal virtual para registrar la salida de todos modos. /dev/consolegeneralmente ya está reservado para esto, aunque es posible que prefiera no hacer lo chownque es probable que tenga que escribir alegremente. Es posible que tenga alguna función que le permita hacer printk, que básicamente es imprimir en/dev/console , y, por lo tanto, podría usarlo de esa manera, supongo.
Otra forma de hacer esto sería dedicar una piedad a tales propósitos. Podría, por ejemplo, mantener una xtermventana abierta, guardar la salida de ttycuando se ejecuta desde allí en una variable de entorno y usar ese valor como destino paragui la salida de. De esa manera, todos los registros se enrutarían a una ventana de registro separada, que luego podría desplazarse si lo desea.
Una vez escribí una respuesta sobre cómo se podría hacer algo similar con la bashhistoria, si estás interesado.