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.