Bash komut dosyasında ENTER tuşuna basma simülasyonu


100

Birkaç komut çalıştıran gerçekten basit bir bash betiği oluşturdum. bu komutlardan biri, çalışma sırasında kullanıcı girdisine ihtiyaç duyar. yani kullanıcıya "falan filan istiyor musunuz?" diye soruyor, betiğin tamamen otomatik hale gelmesi için buna bir enter tuşuna basmak istiyorum.

Çalışma zamanı sırasında girişi veya herhangi bir şeyi beklemek zorunda kalmayacağım, sadece tuşa basmayı göndermek için yeterli ve giriş tamponu gerisini halledecektir.


1
Otomatikleştirmeye çalıştığınız araç ise apt-get, uygun çözüm debconf veritabanını tercih ettiğiniz değerlerle önceden beslemektir; o zaman sana sormayacak.
üçlü

Echo: printf "merhaba \ n" yerine printf kullanabilirsiniz
hassanzadeh.sd

Yanıtlar:


135
echo -ne '\n' | <yourfinecommandhere>

veya yankının ürettiği örtük satırsonu satırından yararlanarak (teşekkürler Marcin)

echo | <yourfinecommandhere>

Şimdi şu --skseçeneği kullanabiliriz :

--sk, --skip-keypressHer testten sonra bir tuşa basılmasını beklemeyin

yani sudo rkhunter --sk --checkall


1
bu çıktıyı beslerseniz, birebir olan hex xxdelde edersiniz . Eğer sadece yaparsanız, aslında bir hex ile sonuçlanırsınız . Bu yüzden programınızın hangisine ihtiyacı varsa onu kullanın. 5c6e\necho | xxd0a
Marcin

3
@Marcin, şaşırdım, 0a0ayine de amaçlandığı gibi olmadığını anladım -n, örtük satırsonu ekliyor . Ama tabii ki haklısın, echo | ...burada bir düzlük iyi çalışıyor. Cevabımı güncelleyecek.
Tilman Vogel

Heh, bana pek doğru gelmedi, bu yüzden xxd ile beslemek zorunda kaldım. Tam olarak hangi komutların çıktığını görmenin açık ara en basit ama en etkili yöntemidir. Aptal Unix numaralarını sevmelisin.
Marcin

@Marsin, yine de neden alıyorsun 5c6e? -eKabuğunuzu atladınız mı yoksa echobu seçeneği tedavi etmediniz mi?
Tilman Vogel

i almak: echo -ne "\n" | xxd 0000000: 0a ve echo -n "\n" | xxd 0000000: 5c6e ve echo "\n" | xxd 0000000: 5c6e 0a ben tek ve çift tırnak arasında herhangi bir fark görmedim. Kabuğum sadece normal bir bash, bu tür temel işlevselliğin davranışını düzenleyen ayarlar var mı?
Marcin

43

yesKomutu yararlı bulabilirsin .

Görmek man yes


57
yesFaydalı buluyorum.
Pureferret

2
Bu, Enter tuşu yerine art arda "y" ye basılmasını simüle eder. Muhtemelen evet / hayır soruları yapmak istediğiniz şey bu olsa da, "y" beklemeyen hiçbir şey için işe yaramayacaktır.
Burhan Ali

5
@BurhanAli: yesÇıktı olarak göndereni değiştirebilirsiniz . Man sayfasını okuyun.
siride

1
varsayılan değerleri [değer] {enter}
AK_

Bu sadece yum gibi şeyler için işe yarar. Bu dizenin beklendiği yer.
einarc


22

İşte kullanım örneği expect:

#!/usr/bin/expect
set timeout 360
spawn my_command # Replace with your command.
expect "Do you want to continue?" { send "\r" }

Kontrol edin: man expectDaha fazla bilgi için.


birden çok enter tuşuna basılması gerektiğinde özellikle yararlıdır
Andy

Bu, özellikle farklı stdout ve stdin dizgelerinin gönderildiği phars gibi şeyler için en iyi yoldur.
einarc

Ayrıca bir argümanınız varsa sadece my_command argümanını girmeyi unutmayın.
einarc

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.