Сократите или объедините несколько строк `&> /dev/null &`

Сократите или объедините несколько строк `&> /dev/null &`

Каждый раз при запуске машины я запускаю следующую программу:

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

Громоздко &> /dev/null &... Как бы мне сократить логику?

решение1

Часть &> /dev/nullозначает перенаправление вывода. Вы можете перенаправить несколько команд в один и тот же файл, сгруппировав их в блок:

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

Однако то же самое нельзя использовать для запуска отдельных команд в фоновом режиме ( &). Размещение &после блока означало бы запуск всего блока как единого скрипта в фоновом режиме.

решение2

Я написал функцию и поместил ее в свой проект, .bashrcчтобы запускать приложения отдельно от терминала:

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

... а потом:

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

А поскольку я ленивый, я также написал сокращение для xdg-open:

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

Поскольку xdg-openожидается ровно один аргумент, функция xoперебирает все заданные аргументы и вызывает xdg-openкаждый из них отдельно.

Это позволяет:

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

решение3

Вы можете перенаправить вывод для всех последующих команд с помощью

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

решение4

Я создал специальный файл типа /dev/nullс более коротким путем, чтобы сократить перенаправление. Я использовал /nв качестве пути нового файла:

sudo mknod -m 0666 /n c 1 3

Таким образом, вы можете сократить отдельные строки, например:

google-chrome &>/n &

Источник:Как создать /dev/null?

Связанный контент