Скоротіть або об'єднайте кілька рядків `&> / dev / null &`


11

Кожного разу при запуску машини я запускаю таку програму:

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


2
Ви можете розмістити всі або більшість цих програм у своїх програмах запуску .
Призупинено до подальшого повідомлення.

чудове, фантастичне застосування. Помилки gnome-session викликали різкі збої, тому я запускаю їх із сервера tmux. @DennisWilliamson
Calculus

Відповіді:


12

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

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

Однак те ж саме не можна використовувати для запуску окремих команд у фоновому режимі ( &). Введення &після блоку означатиме виконання всього блоку як єдиного сценарію у фоновому режимі.


Зауважте, що &>синтаксис застарілий і його слід замінити на >/dev/null 2>&1 wiki-dev.bash-hackers.org/scripting/obsolete
multithr3at3d

4
@ multithr3at3d Башизм, несумісний з POSIX? Звичайно! Застарілий або застарілий? Ні , незалежно від того, що думають три автори цього списку востаннє відредагованого у 2015 році. Це коротка форма, і скорочення командних рядків - це саме мета ОП. Якщо хтось запускає #!/bin/bashскрипт в іншій оболонці, не перевіряючи переносність спочатку, це точно не є виною Баша, якщо він не працює.
десерт

12

Я написав функцію і поставив її .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

5

Ви можете перенаправити висновок для всіх наступних команд за допомогою

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

3

Ви можете створити цикл і надати йому команди як аргументи:

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

Зауважте, що таким чином, як і підхід до підключення з фігурними дужками, можна підбити підсумки та перенаправити всі вони відразу.


3

Я створив спеціальний файл на зразок /dev/nullкоротшого шляху, щоб скоротити переадресацію. Я використовував /nяк шлях до нового файлу:

sudo mknod -m 0666 /n c 1 3

Таким чином ви можете скоротити окремі рядки до:

google-chrome &>/n &

Джерело: Як створити / dev / null?

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.