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

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

$ 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 & ... Как я могу сократить логику?

11
задан 22 May 2019 в 11:32

5 ответов

Я написал функцию и поместил ее в свой .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
0
ответ дан 22 May 2019 в 11:32

Вы можете создать цикл и задать ему команды в качестве аргументов:

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

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

0
ответ дан 22 May 2019 в 11:32

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

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

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

0
ответ дан 22 May 2019 в 11:32

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

sudo mknod -m 0666 /n c 1 3

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

google-chrome &>/n &

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

0
ответ дан 22 May 2019 в 11:32

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

exec 1>/dev/null
exec 2>/dev/null
0
ответ дан 22 May 2019 в 11:32

Другие вопросы по тегам:

Похожие вопросы: