Programları yüklemek için nasıl bir "evet" yanıtı oluşturabilirim?


114

Amazon Linux örnekleriyle çalışıyorum ve verileri doldurmak ve birlikte çalıştığım tüm programları yüklemek için birkaç komut dosyam var, ancak birkaç program soruyor:

Do you want to continue [Y/n]?

ve yüklemeyi duraklatın. Her durumda otomatik olarak "Y" yanıtını vermek istiyorum, bunu nasıl yapacağıma şimdi eminim.


3
Paket yöneticisinde kullanabileceğiniz bir --nopromptveya --noconfirmişareti olabilir.
Blender

Yanıtlar:


209

'Evet' komutu olacak yankı 'y' (veya bunu sormak ne olursa olsun) süresiz. Şu şekilde kullanın:

yes | command-that-asks-for-input

veya büyük 'Y' gerekiyorsa:

yes Y | command-that-asks-for-input

bu sadece evet'ten girişi kullanmak için desteklenen bazı komutlarla çalışır, değil mi? OpenStack'ten bir bakışla denedim ve bu işe yaramıyor, bence Expect tüm koşullar için daha kesin
HVNSweeting

1
//, "evet" kelimesini tam olarak girmeniz gerekirse ne olur?
Nathan Basanese

1
yesCPU'yu maksimize ettiği bilindiği için dikkatli olun . stackoverflow.com/a/18164007/720665
David Salamon

Güzel. Bu sadece hayatımı önemli ölçüde kolaylaştırdı. : D. Ayrıca -ybash betikleri için googling yapmak ZOR oldu.
Nathan Smith

1
@DavidSalamon bu, yalnızca sınırsız bir şeye, örneğin /dev/nullveya STDOUT'a yazarken geçerlidir . Bir komuta borulu, alıcı komut her okuduğunda boruya sadece bir satır yazar ve aksi halde bekler.
Walf

68

echo y | command çalışmalı.

Ayrıca, bazı yükleyicilerde "otomatik evet" işareti bulunur. Bu var -yiçin apt-getUbuntu üzerinde.


"Giturl no" yankısı yapmaya çalışıyorum | jspm kayıt defteri kabuk betiğimde kayıt defteri_adı jspm-git oluştur. ama başarısız olmaya devam ediyor. giurl'e girerken. Herhangi bir fikir?
manismku

Başka bir örnek: docker-compose'da, bir şeyi kaldıran komutlar için "otomatik-evet" olarak çalışan -f( --force) bayrağı vardır
luke

Bilgi isteminin birden fazla kez onay istemesi durumunda tekrar tekrar "Y yankılanması" nasıl olur?
Şafak Özkan

18

Expect'i hedef sunucuya yükleme yeteneğiniz olmayabilir. Bu genellikle bir kişi, mesela bir Jenkins işi yazdığında ortaya çıkar.

Öyleyse, askubuntu.com'da aşağıdakilerin yanıtı gibi bir şey düşünürdüm:

/ubuntu/338857/automatically-enter-input-in-command-line

printf 'y\nyes\nno\nmaybe\n' | ./script_that_needs_user_input

Bazı nadir durumlarda komutun kullanıcının karakterden sonra enter tuşuna basmasını gerektirmediğini unutmayın. bu durumda yeni satırları ana hatlarıyla bırakın:

printf 'yyy' | ./script_that_needs_user_input

Eksiksizlik adına burada bir belge de kullanabilirsiniz:

./script_that_needs_user_input << EOF
y
y
y
EOF

Veya kabuğunuz destekliyorsa burada bir dizge:

./script <<< "y
y
y
"

Veya satır başına bir giriş içeren bir dosya oluşturabilirsiniz:

./script < inputfile

Yine, bu cevabın tüm kredisi askubuntu.com , lesmana'daki cevabın yazarına gider .


//, Bu yanıtı beğendiyseniz lütfen askubuntu.com kullanıcısına @lesmana oy verdiğinizden emin olun.
Nathan Basanese

6

Bu, istediğinizden daha karmaşık / daha ağır olsa da, bunu yapmanın çok esnek bir yolu, Expect (veya başka bir programlama dilindeki türevlerden birini) kullanmaktır.

Expect, metin tabanlı uygulamaları kontrol etmek için özel olarak tasarlanmış bir dildir ve tam da yapmak istediğiniz şey budur. Daha karmaşık bir şey yapmanız gerektiğinde (örneğin, bir sonraki adımda ne yapacağınıza / cevaplayacağınıza karar vermek gibi), Expect gitmenin yoludur.


6

Sadece -yinstall komutunu koymanız gerekiyor .

Örneğin: yum install <package_to_install> -y


3

Yalnızca varsayılanları kabul etmek istiyorsanız, şunları kullanabilirsiniz:

\n | ./shell_being_run

//, Bu, varsayılanları kabul edeceğiniz anlamına gelir?
Nathan Basanese

2
Olarak bash, shbildiğim ve en çok sistemde, yapmanız gerekenler sonraki komuta aksi takdirde olmaz borulu. echo\n
2i3r
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.