Bir komutun soruları için cevaplar hazırlayın


14

Diyelim ki yalnızca bir komut yürüten bir kabuk komut dosyası yazmak istiyorum. Ancak bu komut kötü tasarlanmış. Herhangi bir komut satırı seçeneği sunmaz; bunun yerine bazı sorular sorar ve kullanıcı girdisini bekler.

Kodda bu girdiyi hazırlamanın bir yolu var, bu yüzden sorular otomatik olarak cevaplanıyor mu?

Yanıtlar:


16

Komut çok seçici değilse, böyle bir şeyle çalışmalıdır:

command > /dev/null << EOF
<answer 1>
<answer 2>
<answer 3>
EOF

Bu kesin cevapları önceden bilmenizi gerektirir.


Bir sarma komut dosyası tasarlamak için yukarıdaki yanıtı kullanabilirsiniz. Yeni komut dosyası, parametreleri dinlemeli ve yukarıdaki yöntemi kullanarak eski komutu çağırmalıdır.
Walter A

HERE belgesi olarak da bilinir, daha fazla bilgi için Wikipedia'yı burada
OldTimer

15

Bunu yapabilir. Expect web sitesinden :

Expect, telnet, ftp, passwd, fsck, rlogin, tip, vb. Gibi etkileşimli uygulamaları otomatikleştirmek için bir araçtır. Beklemek aynı uygulamaları test etmek için de yararlıdır [...] "

Autoexpect gibi birçok yardımla birlikte gelir .

Yine Expect web sitesinden,

autoexpect sizi başka bir programla etkileşime girmenizi izler ve etkileşimlerinizi yeniden üreten bir Expect betiği oluşturur. Düz çizgi komut dosyaları için, autoexpect komut dosyalarını el ile yazmakta önemli ölçüde zaman kazandırır.


Cevabınız için teşekkür ederim. İhtiyaçlarım çok düşük olduğu için Beklentim benim durumumda aşırıya kaçıyor. Bjorns cevap benim ihtiyaçlarına mükemmel şekilde uyuyor. Ancak daha karmaşık bir çözüme ihtiyaç duyan başkaları için cevabınızı saklamanızı öneririm.
tmuecksch

+1 çünkü otomatik beklemenin var olduğunu bilmiyordum ve beklenen öğrenme eğrisinin benim için çok dik olduğunu anladım. Bir daha bakacağım.
Joe

7

Komut dosyanız bir istemin yanıtlanmasını veya aynı yanıtı verebileceğiniz birkaç istem beklerse yes:

NAME
       yes - output a string repeatedly until killed

SYNOPSIS
       yes [STRING]...
       yes OPTION

DESCRIPTION
       Repeatedly output a line with all specified STRING(s), or `y'.

Şöyle kullanın:

yes Me | give_a_hug.sh

3
İronik bir kullanım olsa da yes n, örneğin:yes n | mv -i * somewhere/
Sam Watkins
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.