Каждый раз, запуская машину, я запускаю следующую программу:
$ 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 &
... Как я могу сократить логику?
Я написал функцию и поместил ее в свой .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
Вы можете создать цикл и задать ему команды в качестве аргументов:
for i in google-chrome "xdg-open ." "code ~/Programs/"; do
$i &
done &>/dev/null
Обратите внимание, что таким же образом, как и в случае подоболочечного подхода с фигурными скобками, можно суммировать выходные данные и перенаправлять все из них. сразу.
Часть &> /dev/null
означает перенаправление вывода. Вы можете перенаправить несколько команд в один и тот же файл, сгруппировав их в блок:
#! /bin/bash
{
google-chrome &
lantern &
xdg-open . &
emacs &
code ~/Programs/ &
xdg-open ~/Reference/topic_regex.md &
} &> /dev/null
Однако одно и то же нельзя использовать для запуска отдельных команд в фоновом режиме (&
). Помещение &
после блока будет означать запуск всего блока как одного скрипта в фоновом режиме.
Я создал специальный файл, такой как /dev/null
с более коротким путем, чтобы сократить перенаправление. Я использовал /n
в качестве пути к новому файлу:
sudo mknod -m 0666 /n c 1 3
Таким образом, вы можете сократить отдельные строки, например:
google-chrome &>/n &
Источник: Как создать / dev / нуль?
Вы можете перенаправить вывод для всех последующих команд с помощью
exec 1>/dev/null
exec 2>/dev/null