Bas betiğinde y'ye otomatik olarak nasıl cevap verebilirim?


16

Bazı programları bash betiği ile kaldırmak istiyorum. Komutu çalıştırdıktan sonra terminal, kaldırmak istediğimden emin olup olmadığımı soruyor. Bu yüzden cevaplamam gerekiyor y. Otomatik olarak yapmak ve y10 saniyelik bir gecikmeden sonra cevaplamak istiyorum .

Bu örneği yaptım ama işe yaramıyor -

#!/usr/bin
/opt/MNG/MNGVIEWHP/fe/uninstall
sleep 10
echo "y"

Herhangi bir fikir? Centos 7.2


6
ITYM, #! /bin/bash -yerine#!/usr/bin
Stéphane Chazelas

uninstallprogramın parametreleri kabul edip etmediğini veya bir yapılandırma komut dosyasını kabul edip etmediğini kontrol edin . Bu şekilde daha kolay olacak
phuclv

2
Web genelinde sorulan ve yanıtlanan reklamlar . “ işe yaramıyor” sorunun iyi bir tanımı değildir. Belki de sorunun sayısız diğerlerinden nasıl farklı olduğunu belirtebilirsiniz.

2
Senaryonuzun gerçekte yaptığı şey: çalıştırın uninstallve çıkmasını bekleyin. Sonra 10 saniye uyu. Sonra y\nstdout'a yankı (hala terminale bağlı, herhangi bir programın stdinine değil)
Peter Cordes

Yanıtlar:


51

Yani ne yeskomut içindir. ySüresiz olarak her satırda bir çıkış verir, böylece evet / hayır soruları soran komutlara yönlendirilebilir.

yes | /opt/MNG/MNGVIEWHP/fe/uninstall

Bu ytüm sorulara cevap veriyor. nTüm soruları cevaplamak için yesile değiştirin yes n. Önceden tanımlı bir karışımı için yve n, sen yerine yessahip:

printf '%s\n' y n n y y n...

Veya şu şekilde çalıştırın:

/opt/MNG/MNGVIEWHP/fe/uninstall << 'EOF'
y
n
n
y
y
n
EOF

Cevabın 10 saniyeden önce okunamayacağına ihtiyacınız varsa şunları yaparsınız:

(sleep 10; echo y; sleep 2; echo n;...) | /opt/MNG/MNGVIEWHP/fe/uninstall

Ancak bu muhtemelen gerekli yolmayacaktır, boruya yazdığımızda , uninstallokumak istediği zaman okumak için orada olacak, okumak için hazır olmasını beklemeniz pek olası değildir. İstisna uninstall, soruyu sormadan önce girişi temizlemeye karar verirse olabilir.

Tüm bunlar uninstallkomutun her cevabı standart girişinden bir girdi satırı olarak okuduğunu varsayar .

Komutun yanıtları doğrudan tty cihazından okuduğu veya yanıtları koşullu olarak (örneğin komutun çıktısına bağlı olarak) beslemeniz gereken daha karmaşık durumlar için, expectveya zsh' gibi şeyleri kullanacağınız yer burasıdır zpty.

Bazı etkileşimli programların bazı seçeneklerden geçtiklerinde bazı etkileşimli olmayan moda girebileceğini unutmayın. Sorunu çözmek için çok fazla çaba harcamadan önce ilk olarak kılavuzlarını kontrol etmek isteyebilirsiniz.


Teşekkürler! Sadece bir soruya cevap vermemiz gerektiğinde sorun yoktur. Örneğin 20 soruya cevap vermemiz gerekirse ne oldu?
Shalev Sason

@Shalev, bkz. Düzenleme.
Stéphane Chazelas

Teşekkürler ! Eğer interger (örneğin 2) gibi başka bir değer girmek istersem "y" yerine değiştirmeliyim? printf '% s \ n' ynnyyn 2 3 ny | / opt / MNG / MNGVIEWHP / fe / uninstall
Shalev Sason

Evet, fikir bu.
Stéphane Chazelas

3
@ShalevSason, verdiğim tüm çözümlerde echo "y", her seferinde olduğu gibi, yazıyoruz y<newline>, tuşuna basarak simüle ve yardından Enter tuşuna basıyoruz . Yalnızca Enter tuşuna basmayı simüle etmek istiyorsanız, bu boş bir satır besler, yani printf '%s\n' y n '' 2 3( ''boş satır nerede ).
Stéphane Chazelas
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.