Birden fazla "&> / dev / null &" satırını kısaltın veya birleştirin


11

Makineyi her başlattığınızda aşağıdaki programı çalıştırıyorum:

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

Hantal &> /dev/null &... Mantığı nasıl kısaltabilirim?


2
Bu programların tümünü veya çoğunu Başlangıç ​​Uygulamalarınıza koyabilirsiniz .
sonraki duyuruya kadar duraklatıldı.

harika, harika bir uygulama. Genellikle gnome-oturumda ani çökmelere neden olan hatalar meydana geldi, bu yüzden onları tmux sunucusundan başlatıyorum. @DennisWilliamson
Matematik

Yanıtlar:


12

Parça &> /dev/null, çıkış yeniden yönlendirmesi anlamına gelir. Birden fazla komutu aynı dosyaya bir blokta gruplandırarak yeniden yönlendirebilirsiniz:

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

Ancak aynı şey, arka planda ( &) tek tek komutları başlatmak için kullanılamaz . &Bloktan sonra koymak , tüm bloğu arka planda tek bir komut dosyası olarak çalıştırmak anlamına gelir.


&>Sözdiziminin kullanımdan kaldırıldığını ve >/dev/null 2>&1 wiki-dev.bash-hackers.org/scripting/obsolete
multithr3at3d

4
@ multithr3at3d POSIX ile uyumsuz bir Bashizm? Elbette! Kullanımdan kaldırıldı mı yoksa kullanılmıyor mu? Hayır , bu listenin üç yazarının 2015'te en son ne düzenlediğine bakılmaksızın düşünüyoruz. Kısa bir biçimdir ve komut satırlarını kısaltmak OP'nin hedefi tam olarak budur. Birisi #!/bin/bashtaşınabilirliği kontrol etmeden farklı bir kabukta bir komut dosyası çalıştırırsa, ilk önce işe yaramazsa kesinlikle Bash'ın hatası değildir.
tatlı

12

Bir işlev yazdım ve .bashrcterminalimden ayrılmış işleri çalıştırmak için benim koydum :

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

... ve sonra:

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

Tembel olduğum için ayrıca bir kısayol yazdım xdg-open:

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

Çünkü xdg-openbeklentiden tam olarak bir argüman, fonksiyon xotüm verilen argümanlar ve çağrılar üzerinde dolaşır xdg-openayrı ayrı her biri için.

Bu şunları sağlar:

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

5

Sonraki tüm komutlar için çıktıyı

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

3

Bir döngü oluşturabilir ve ona komutları bağımsız değişken olarak verebilirsiniz:

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

Bu şekilde kıvırcık parantezli subshell yaklaşımında olduğu gibi, çıktıları toplayıp hepsini bir kerede yeniden yönlendirmenin mümkün olduğunu unutmayın.


3

/dev/nullYeniden yönlendirmeyi kısaltmak için daha kısa bir yol gibi özel bir dosya oluşturdum . Kullandığım /nyeni dosyanın yolu olarak:

sudo mknod -m 0666 /n c 1 3

Bu şekilde münferit hatları kısaltabilirsiniz:

google-chrome &>/n &

Kaynak: / dev / null nasıl oluşturulur?

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.