Kabuğa birçok komut nasıl gönderilir ve uçların ardındaki komut nasıl beklenir [kapalı]


16

Yaklaşık 20 komutum var ve tüm bunları Unix kabuğuna göndermek ve sonucu kopyalamak zorundayım, ancak nasıl yapılacağını bilmiyorum.

Hangi kabuğa sahip olduğumdan emin değilim, çünkü Mobil Ağ Yönetimine bağlı küçük bir program ve bu küçük programla komutları satır satır gönderme ve çığlık yoluyla sonuçları alma erişimimiz var, bu nedenle komut dosyalarını kullanamıyorum komutanları gönderiyor.

Komut 1 - Bir sunucuya bağlanın.

Komut 1 bitene kadar bekleyin

Komut 2 - Sunucu 1 bitişindeki tüm bilgileri güncelleyin

Bekle.

Komut 3 . Biraz parametre alın.

... ve daha birçok komut.

Ben denedim ile cmd1 | cmd2 | cmd3 ve cmd1 & cmd2 & cmd3 vecmd1;cmd2

Sorun, cmd1bir RNC'ye (Ağ elemanı) bağlı olması ve cmd2bunun mantıklı olmasından 15 saniye sonra ortaya çıkmasıdır . ama sadece ilk cmd için çalışın. Herhangi bir ipucu, nasıl çalıştırılır?


3
Bir komut dosyası mı kullanıyorsunuz? Veya &&komutlar arasında.
Bernhard

Yanıtlar:


20

Genellikle sadece cmd1;cmd2;cmd3;cmd4(bir satıra yazmak istiyorsanız) veya cmd1 && cmd2 && cmd3 && cmd4cmd2 başarısız olduğunda cmd3'ü çalıştırmak istemiyorsanız kullanın.

Alternatif olarak ;, her satıra bir komut yazabilirsiniz.

cmd1
cmd2
cmd3
cmd4

Komutların arka planda paralel olarak çalışmasını istiyorsanız,

cmd1 &
cmd2 &
cmd3 &
cmd4 &
wait # for cmd1-4 to finish

Bu yöntemlerden her ikisi de bir kabuk betiğine konabilir. Bir kabuk komut dosyasında yazdıklarınız ile gerçek kabukta yazdıklarınız arasında çok az fark vardır.


MMd1'i gönderdiğimde sorun gerçekten 6 saniye civarında bitirmek zorunda, sorun cmd2 ve cmd1'i gönderdiğinde hala başarısız oluyor.
Jonathan Raul Tapia Lopez

4
Bu cmd1;cmd2durumda (veya cmd1 && cmd2bu konuda) cmd1, cmd1 çıkana kadar (ve muhtemelen bitene kadar) çalışmaz. Bu yüzden herhangi bir sorun olmamalıdır - lütfen sorunuzu yeniden ifade edin veya insanların gerçekten çoğaltabileceği bir örnek verin.
frostschutz

Tamam, soruyu değiştireceğim. teşekkürler
Jonathan Raul Tapia Lopez

2

sleepOrtamınız izin veriyorsa, bakmak isteyebilirsiniz . Bu durumda dizinin tamamı böyle bir şey olacaktır cmd1 && sleep 10s && cmd2.
İşte uyku için ilgili kılavuz sayfası .


uyku / bekleme yalnızca önceki programın (arka plandaki işlemi ortaya çıkarabilir) ne kadar sürede bitmesi ve çıkması gerektiğini belirler (IE Durma Sorunu) VEYA aradan sonra ikinci komutunuzu kesmek ve çalıştırmak istediğinizi garanti ediyorsanız geçti, ki bu ikisi eşzamansızsa yine de aralarında biraz zaman geçirmek istiyorsanız. Büyük olasılıkla olsa da, ne istediğinizi değil. Pratik olarak, işe yarayabilir. Ama güvenilir değil.
Justin Reeves

1

Bir komut dosyası, birbiri ardına çalıştırmak için komutları içeren bir dosya kullanın, örneğin:

#!/bin/sh

command-01
command-02
...
command-20

İlk satır (shebang) kullanarak aşağıdaki komutları çalıştırmayı söyler /bin/sh, dosyayı yürütülebilir ( chmod u+x your-little-script) yapın ve ardından çalıştırabilirsiniz ./my-little-script. Bu şekilde dışarı adım atmayacaksınız ;-)

Kabuk kılavuzunu okuyun, tam bir programlama dili sağlar. bash(1)Mevcut olup olmadığını veya Korn kabuğunun olup olmadığını kontrol edin ksh(1). Komut dosyalarında (veya bu konuda etkileşimli olarak) denetim akışını kontrol etmek için birçok yararlı özellik sunarlar.


Teşekkürler ama scritps kullanamıyorum.
Jonathan Raul Tapia Lopez

Neden? Her halükarda, bu çok faşist bir ortam değilse , betiği kaynaklayabilmelisiniz: source your-little-script(veya . your-little-scriptkısaca).
vonbrand

Çünkü, sadece satırlarda cmd yürütmek ve çığlık ile sonuç almak için izin ne mini bir program gibi unix sisteme erişmek yok ve bu komutlar ile kullanmak için kullanacağım komutları kullanmak için pratik değil.
Jonathan Raul Tapia Lopez

Tamam, bu durum biraz netleşiyor ... Komutlarınızın kaynağı / hedefi hangi ortam? Yürütülecek komutları göndermek için ne kullanıyorsunuz? Uzak ortam nedir? Oradaki kurulumunuz nedir ( sshveya üzerinden erişebileceğiniz normal bir hesabınız var PuTTYmı?)
vonbrand

-1

expectGöndermek cmd1ve yayınlamadan önce bitmesini beklemek için yerel bilgisayarınızda olduğu gibi bir şey çalıştırabilirsiniz cmd2. Komut dosyası bekliyoruz.

Tabii ki, cmd1; cmd2; cmd3; cmd4bir komutta komutları birbiri ardına sırayla yürütür.

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.