Sanırım bunu istiyorsun:
myCommand1 & myCommand2 &
Bu başlar myCommand1ve arkasından ve işareti geldiği için arka plana gönderir, hemen başlar myCommand2ve bunu arka plana da gönderir, böylece kabuğu tekrar serbest bırakır.
Listeler
Daha iyi anlaşılması için, yerine kullanabilir boru hattı ile komuta burada.
Liste, operatörlerden biri ile ayrılmış bir veya daha fazla boru hattının bir dizisidir ; , & , && veya || ve isteğe bağlı olarak şunlardan biri ile sonlandırılır
; , & , veya .
Bir komut, kontrol operatörü & tarafından sonlandırılırsa , kabuk, komutu bir alt kabukta arka planda yürütür. Kabuk, komutun bitmesini beklemez ve dönüş durumu 0'dır. Komutlar a ile ayrılmış ; sırayla yürütülür; mermi sırayla her komutun bitmesini bekler. Dönüş durumu, son çalıştırılan komutun çıkış durumudur.
AND ve OR listeleri, && ve || ile ayrılmış bir veya daha fazla boru hattının dizisidir. kontrol operatörleri.
Kaynak:man bash
Bunu örneklere ayıralım. Komutları birleştirip bunlardan biriyle ayırarak bir liste oluşturabilirsiniz ; & && ||:
command1 ; command2 # runs sequentially
command1 && command2 # runs sequentially, runs command2 only if command1 succeeds
command1 || command2 # runs sequentially, runs command2 only if command1 fails
command1 & command2 # runs simultaneously
Bunlardan biriyle listeleri kesebilirler: ; & <newline>.
Normalde Enter, eşit olan bir komut veya liste yürütürsünüz <newline>. Noktalı virgül ;özellikle komut dosyalarında aynı amaca hizmet eder. &Ancak ve işareti , kabukları derhal serbest bırakarak arka planda bir alt kabukta komut (lar) ı başlatır.
Daha fazla grup listesi için yuvarlak ()veya kıvırcık parantez {}kullanabilirsiniz, fark yuvarlak parantezlerin bir alt kabuk oluşturması ve kıvırcık parantezlerin olmamasıdır. Kıvırcık parantezlerin ilkinden sonra boşluk ve noktalı virgül veya kapanış parantezinden önce yeni satır gerekir. Örneğin:
# if c1 succeeds start a shell in the background
# and run c2 and c3 sequentially inside it
c1 && ( c2 ; c3 ) &
# run c1 and if it succeeds c2 sequentially as a group command
# if c1 or c2 fail run c3 in the background
{ c1 && c2 ;} || c3 &
Bu, kullanımdan emin değilseniz trueve falseinşaatın beklendiği gibi çalışıp çalışmadığını test etmek için oldukça karmaşık olabilir :
$ { true && true ;} || echo 2
$ { true && false ;} || echo 2
2
İş Kontrolü
jobsKomut çalıştıran veya son zamanlarda şimdiki kabuğunda bitmiş olan arka plan işlerinin bir listesi. İş denetimi için birkaç klavye kısayolu ve komutu vardır:
- Ctrl+ ön planda çalışmakta olan işlemin durdurulmasına neden Zolan askıya alma karakterini yazar, sonlandırılmaz, ancak
jobslistede kalır
- Ctrl+ , ön planda çalışmakta olan işlemin terminalden girişi okumaya çalıştığında durdurulmasına neden Yolan gecikmeli askıya alma karakterini yazar
fg= %gerekirse bir işlemi başlatarak ön plana getirir, işlemi aşağıdaki gibi belirtebilirsiniz:
% # last process in the jobs list
%1 # 1st process in the jobs list
%abc # process beginning with the string “abc”
%?abc # process containing the string “abc” anywhere
bg= %&gerekirse bir işlemi arka planda başlatır:
%& # last process in the jobs list
%1& # 1st process in the jobs list
%abc& # process beginning with the string “abc”
%?abc& # process containing the string “abc” anywhere
wait bir arka plan işleminin tamamlanmasını bekler ve sonlandırma durumunu döndürür:
wait %1 # 1st process in the jobs list
Uzun bir işlem başlattığınızı ( jobs3 sayısını ortaya çıkardığını) ve daha sonra bilgisayarın tamamlandığında askıya alınmasını echove işlemin başarılı olamadığını bildiren bir mesaj aldığınızı hayal edin :
wait %3 || echo failed ; systemctl suspend