Acorte o combine varias líneas de `&> /dev/null &`

Acorte o combine varias líneas de `&> /dev/null &`

Cada vez que inicio la máquina, ejecuto el siguiente programa:

$ cat start.sh
#! /bin/bash
google-chrome &> /dev/null &
lantern &> /dev/null &
xdg-open . &> /dev/null &
emacs &> /dev/null  &
code ~/Programs/ &> /dev/null &
xdg-open ~/Reference/topic_regex.md &> /dev/null &

Engorroso &> /dev/null &... ¿Cómo podría acortar la lógica?

Respuesta1

La parte &> /dev/nullsignifica redirección de salida. Puedes redirigir varios comandos al mismo archivo agrupándolos en un bloque:

#! /bin/bash
{
google-chrome &
lantern &
xdg-open . &
emacs  &
code ~/Programs/ &
xdg-open ~/Reference/topic_regex.md &
} &> /dev/null

Sin embargo, no se puede utilizar lo mismo para iniciar comandos individuales en segundo plano ( &). Ponerlo &después del bloque significaría ejecutar todo el bloque como un único script en segundo plano.

Respuesta2

Escribí una función y la puse en mi .bashrcpara ejecutar cosas separadas de mi terminal:

detach () 
{ 
    ( "$@" &> /dev/null & )
}

... y luego:

detach google-chrome
detach xdg-open ~/Reference/topic_regex.md

Y como soy vago, también escribí un atajo para xdg-open:

xo () 
{ 
    for var in "$@"; do
        detach xdg-open "$var";
    done
}

Como xdg-openespera exactamente un argumento, la función xoitera sobre todos los argumentos dados y llama xdg-opena cada uno por separado.

Esto permite:

detach google-chrome
xo . ~/Reference/topic_regex.md

Respuesta3

Puede redirigir la salida para todos los comandos posteriores con

exec 1>/dev/null
exec 2>/dev/null

Respuesta4

Creé un archivo especial /dev/nullcon una ruta más corta para acortar la redirección. Utilicé /ncomo ruta del nuevo archivo:

sudo mknod -m 0666 /n c 1 3

De esta manera puede acortar las líneas individuales a, por ejemplo:

google-chrome &>/n &

Fuente:¿Cómo crear /dev/null?

información relacionada