Raccourcissez ou fusionnez plusieurs lignes de `&> / dev / null &`

11

À chaque démarrage de la machine, j'exécute le programme suivant:

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

Lourdeur &> /dev/null &... Comment pourrais-je raccourcir la logique?

Calcul
la source
2
Vous pouvez mettre tout ou la plupart de ces programmes dans vos applications de démarrage .
pause jusqu'à nouvel ordre.
grande et fantastique application. Les erreurs se sont généralement produites lors de la gnome-session provoquant un crash brutal, donc je les démarre depuis le serveur tmux. @DennisWilliamson
Calcul

Réponses:

12

La partie &> /dev/nullsignifie la redirection de sortie. Vous pouvez rediriger plusieurs commandes vers le même fichier en les regroupant dans un bloc:

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

Cependant, la même chose ne peut pas être utilisée pour démarrer des commandes individuelles en arrière-plan ( &). Mettre &après le bloc signifierait exécuter le bloc entier comme un seul script en arrière-plan.

Melebius
la source
Notez que la &>syntaxe est obsolète et doit être remplacée par >/dev/null 2>&1 wiki-dev.bash-hackers.org/scripting/obsolete
multithr3at3d
4
@ multithr3at3d Un basisme incompatible avec POSIX? Sûr! Obsolète ou obsolète? Non , quoi qu'en pensent les trois auteurs de cette liste éditée en 2015. C'est une forme courte, et raccourcir les lignes de commande est exactement l'objectif d'OP ici. Si quelqu'un exécute un #!/bin/bashscript dans un autre shell sans vérifier d'abord la portabilité, ce n'est certainement pas la faute de Bash s'il ne fonctionne pas.
dessert
12

J'ai écrit une fonction et l'ai mise dans mon .bashrcpour exécuter des choses détachées de mon terminal:

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

... puis:

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

Et parce que je suis paresseux, j'ai également écrit un raccourci pour xdg-open:

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

Parce qu'elle xdg-openattend exactement un argument, la fonction xoitère sur tous les arguments donnés et les appelle xdg-openséparément.

Cela permet:

detach google-chrome
xo . ~/Reference/topic_regex.md
PerlDuck
la source
5

Vous pouvez rediriger la sortie pour toutes les commandes suivantes avec

exec 1>/dev/null
exec 2>/dev/null
Oh non
la source
3

Vous pouvez créer une boucle et lui donner les commandes comme arguments:

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

Notez que de cette manière exactement comme avec l'approche sous-coque avec des accolades, il est possible de résumer les sorties et de les rediriger toutes en même temps.

dessert
la source
3

J'ai créé un fichier spécial comme /dev/nullavec un chemin plus court pour raccourcir la redirection. J'ai utilisé /ncomme chemin du nouveau fichier:

sudo mknod -m 0666 /n c 1 3

De cette façon, vous pouvez raccourcir les lignes individuelles pour par exemple:

google-chrome &>/n &

Source: Comment créer / dev / null?

dessert
la source