Persingkat atau gabungkan beberapa baris `&> / dev / null &`

11

Setiap kali memulai mesin, saya menjalankan program berikut:

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

Susah &> /dev/null &... Bagaimana saya bisa mempersingkat logika?

Kalkulus
sumber
2
Anda dapat meletakkan semua atau sebagian besar program tersebut di Aplikasi Startup Anda .
Dijeda sampai pemberitahuan lebih lanjut.
aplikasi hebat, fantastis. Kesalahan biasanya terjadi pada sesi gnome yang menyebabkan crash tiba-tiba, jadi saya memulainya dari server tmux. @DennisWilliamson
Kalkulus

Jawaban:

12

Bagian ini &> /dev/nullberarti pengalihan output. Anda dapat mengalihkan beberapa perintah ke file yang sama dengan mengelompokkannya ke dalam blok:

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

Namun, hal yang sama tidak dapat digunakan untuk memulai perintah individual di latar belakang ( &). Menempatkan &setelah blok berarti menjalankan seluruh blok sebagai skrip tunggal di latar belakang.

Melebius
sumber
Perhatikan bahwa &>sintaks sudah usang dan harus diganti dengan >/dev/null 2>&1 wiki-dev.bash-hackers.org/scripting/obsolete
multithr3at3d
4
@ multithr3at3d Bashisme tidak kompatibel dengan POSIX? Tentu! Sudah usang atau usang? Tidak , terlepas dari apa yang dipikirkan oleh ketiga penulis daftar ini yang diedit pada tahun 2015. Ini adalah formulir singkat, dan memperpendek baris perintah adalah tujuan OP di sini. Jika seseorang menjalankan #!/bin/bashskrip dalam shell yang berbeda tanpa memeriksa portabilitas terlebih dahulu, itu jelas bukan kesalahan Bash jika itu tidak berfungsi.
hidangan penutup
12

Saya menulis sebuah fungsi dan memasukkannya ke saya .bashrcuntuk menjalankan hal-hal yang terlepas dari terminal saya:

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

... lalu:

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

Dan karena saya malas, saya juga menulis jalan pintas untuk xdg-open:

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

Karena xdg-openmengharapkan tepat satu argumen, fungsi ini xomengulangi semua argumen dan panggilan xdg-openuntuk masing-masing argumen secara terpisah.

Ini memungkinkan untuk:

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

Anda bisa mengarahkan output untuk semua perintah selanjutnya dengan

exec 1>/dev/null
exec 2>/dev/null
Oh tidak
sumber
3

Anda bisa membuat lingkaran dan memberikannya perintah sebagai argumen:

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

Perhatikan bahwa cara ini persis sama dengan pendekatan subkulit dengan kurung kurawal mungkin untuk meringkas output dan mengarahkan semuanya sekaligus.

pencuci mulut
sumber
3

Saya membuat file khusus seperti /dev/nulldengan jalur yang lebih pendek untuk mempersingkat pengalihan. Saya menggunakan /nsebagai jalur file baru:

sudo mknod -m 0666 /n c 1 3

Dengan cara ini Anda dapat memperpendek garis individual menjadi misalnya:

google-chrome &>/n &

Sumber: Cara membuat / dev / null?

pencuci mulut
sumber