Abbreviare o unire più righe di `&> / dev / null &`


11

Ad ogni avvio della macchina, eseguo il seguente programma:

$ 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 &

Ingombrante &> /dev/null &... Come potrei accorciare la logica?


2
È possibile inserire tutti o la maggior parte di tali programmi nelle applicazioni di avvio .
In pausa fino a ulteriore avviso.

ottima, fantastica applicazione. Di solito si sono verificati errori nella sessione di gnome che causano crash improvvisi, quindi li avvio dal server tmux. @DennisWilliamson
Calculus

Risposte:


12

La parte &> /dev/nullindica il reindirizzamento dell'output. Puoi reindirizzare più comandi allo stesso file raggruppandoli in un blocco:

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

La stessa cosa, tuttavia, non può essere utilizzata per avviare singoli comandi in background ( &). Mettere &dopo il blocco significherebbe eseguire l'intero blocco come un singolo script in background.


Si noti che la &>sintassi è obsoleta e deve essere sostituita con >/dev/null 2>&1 wiki-dev.bash-hackers.org/scripting/obsolete
multithr3at3d,

4
@ multithr3at3d Un bashismo incompatibile con POSIX? Sicuro! Obsoleto o obsoleto? No , indipendentemente da ciò che pensano i tre autori di questo elenco modificati l'ultima volta nel 2015. È una forma breve e accorciare le linee di comando è esattamente l'obiettivo di OP qui. Se qualcuno esegue uno #!/bin/bashscript in una shell diversa senza prima verificare la portabilità, non è sicuramente colpa di Bash se non funziona.
dessert

12

Ho scritto una funzione e l'ho messa nel mio .bashrcper eseguire le cose staccate dal mio terminale:

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

... e poi:

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

E poiché sono pigro, ho anche scritto una scorciatoia per xdg-open:

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

Poiché si xdg-openaspetta esattamente un argomento, la funzione xoesegue l'iterazione su tutti gli argomenti forniti e chiama xdg-openciascuno separatamente.

Ciò consente di:

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

5

È possibile reindirizzare l'output per tutti i comandi successivi con

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

3

È possibile creare un ciclo e dargli i comandi come argomenti:

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

Si noti che in questo modo esattamente come con l'approccio subshell con parentesi graffe è possibile riassumere gli output e reindirizzarli tutti in una volta.


3

Ho creato un file speciale come /dev/nullcon un percorso più breve per abbreviare il reindirizzamento. Ho usato /ncome percorso del nuovo file:

sudo mknod -m 0666 /n c 1 3

In questo modo è possibile abbreviare le singole linee, ad esempio:

google-chrome &>/n &

Fonte: Come creare / dev / null?

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.