Acortar o fusionar varias líneas de `&> / dev / null &`


11

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 &

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


2
Puede poner todos o la mayoría de esos programas en sus Aplicaciones de inicio .
Pausado hasta nuevo aviso.

genial, fantástica aplicación. Por lo general, se produjeron errores en gnome-session que causaron fallas bruscas, por lo que los inicio desde el servidor tmux. @DennisWilliamson
Cálculo

Respuestas:


12

La parte &> /dev/nullsignifica redirección de salida. Puede redirigir múltiples 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, lo mismo no se puede usar para iniciar comandos individuales en segundo plano ( &). Poner &después del bloque significaría ejecutar todo el bloque como un solo script en segundo plano.


Tenga en cuenta que la &>sintaxis está en desuso y debe reemplazarse con >/dev/null 2>&1 wiki-dev.bash-hackers.org/scripting/obsolete
multithr3at3d

44
@ multithr3at3d ¿Un bashismo incompatible con POSIX? ¡Seguro! ¿En desuso u obsoleto? No , independientemente de lo que piensen los tres autores de esta lista editados por última vez en 2015. Es una forma corta, y acortar las líneas de comando es exactamente el objetivo de OP aquí. Si alguien ejecuta un #!/bin/bashscript en un shell diferente sin verificar primero la portabilidad, definitivamente no es culpa de Bash si no funciona.
postre

12

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

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

... y entonces:

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

Y como soy flojo, 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

5

Puede redirigir la salida para todos los comandos posteriores con

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

3

Podría crear un bucle y asignarle los comandos como argumentos:

for i in google-chrome "xdg-open ." "code ~/Programs/"; do
  $i &
done &>/dev/null

Tenga en cuenta que de esta manera, exactamente como con el enfoque de subshell con llaves, es posible resumir los resultados y redirigirlos todos a la vez.


3

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

sudo mknod -m 0666 /n c 1 3

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

google-chrome &>/n &

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.