Betik birden fazla Q / A bekliyoruz


2

Aşağıdaki bekliyoruz komut dosyası var:

#!/usr/bin/expect

set timeout 20

set cmd "/path/vpntool  --server 1.2.3.4:443 --vpnuser user"
set password [lindex $argv 0]

eval spawn $cmd
expect "VPN:"
send "$password\r";
interact

expect ".*\(Y\/N\)"
send "Y\r";

interact

Komut dosyaları "Bu sunucuya bağlanmak ister misiniz? (E / H)" sorusunda durur cevabını bekler.

Sorunun ne olabileceğini bilen var mı?


Hata: “Bu sunucuya bağlanmak ister misiniz? (E / H) ”komut dosyasında bulunamadı. Bunun harici bir komuttan geldiğini varsayıyorum. Bu nedenle bize biraz daha bilgi vermeniz gerekecek.
ctrl-alt-delor

Soru Forticlient SSL VPN istemcisinin / path / vpntool binary'den geliyor. İkinci soru sadece ilk değer (şifre) kabul edildikten sonra standart çıktı. Ve genellikle 1 saniyeden küçük bir gecikmeyle birlikte gelir. Ayrıca regex yerine "Bu sunucuya bağlanmak ister misiniz? (E / H)" ile denedim ve hala çalışmıyor ...
Spike.WD

Unutma ki kaçtın /. Sebep bu mu? VEYA belki göndermeniz gerekir Y\n.
ctrl-alt-delor

Parola kabul edildikten sonra süresi dolmuş bir sertifika bilgisi stdout'a atılır ve son satır "Bu sunucuya bağlanmak ister misiniz? lines ...
Spike.WD

İkinci emrinizden interact önce gelmenizin bir nedeni var mı expect? Bu etkileşimin bir geri dönüş koşulu yoktur, bu yüzden expect ".*\(Y\/N\)"asla erişilmez ... Ayrıca: /karakter normal ifadeler için özel değildir ve kaçmak zorunda değildir .*ve beklenen desenin başında gereksizdir.
Bu benim

Yanıtlar:


5

Bekle, aynen söylediğin gibi yapıyor.

interactÇıkış kriterleri olmayan bir komuta sahipsiniz , bu noktada komut dosyası kullanıcıya kontrol verir ve asla geri alamaz.

Bir Beklenti komut dosyasının ortasında etkileşimli erişime ihtiyacınız varsa , Stack Overflow.SE'de bu soruya bakın . Komut dosyasının tam olarak nasıl davranmasını istediğinize bağlı olarak uygulanabilecek birden fazla yanıt vardır.

Eğer betiğin, betiği başlattıktan sonra kullanıcı etkileşimi olmadan tamamen otomatikleştirilmesi gerekiyorsa, neden interactoradaki komut orada?

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.