เตรียมคำตอบสำหรับคำถามของคำสั่ง


14

สมมติว่าฉันต้องการเขียนเชลล์สคริปต์ที่รันเพียงคำสั่งเดียว แต่คำสั่งนี้ออกแบบมาไม่ดี ไม่มีตัวเลือกบรรทัดคำสั่งใด ๆ แทนที่จะถามคำถามและรอการป้อนข้อมูลจากผู้ใช้

มีวิธีการเตรียมข้อมูลนี้ในสคริปต์หรือไม่ดังนั้นคำถามจะได้รับคำตอบโดยอัตโนมัติหรือไม่

คำตอบ:


16

หากคำสั่งไม่จู้จี้จุกจิกมันควรจะทำงานกับสิ่งนี้:

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

สิ่งนี้ต้องการให้คุณรู้คำตอบที่ถูกต้องล่วงหน้า


คุณสามารถใช้คำตอบข้างต้นสำหรับการออกแบบสคริปต์การตัดคำ สคริปต์ใหม่ควรฟังพารามิเตอร์และเรียกใช้คำสั่งเก่าด้วยวิธีการข้างต้น
วอลเตอร์

หรือที่เรียกว่าเอกสาร HERE นี่สำหรับข้อมูลเพิ่มเติมคุณสามารถลองใช้วิกิพีเดียได้ที่นี่นิยามเอกสาร
OldTimer

15

คาดว่าสามารถทำเช่นนั้น จากเว็บไซต์คาดหวัง:

Expect เป็นเครื่องมือสำหรับการทำงานอัตโนมัติของแอปพลิเคชั่นแบบโต้ตอบเช่น telnet, ftp, passwd, fsck, rlogin, tip ฯลฯ คาดว่าจะทำให้สิ่งนี้เล็กน้อย ความคาดหวังยังมีประโยชน์สำหรับการทดสอบแอปพลิเคชันเดียวกันเหล่านี้ [... ] "

มันมาพร้อมกับความช่วยเหลือมากเช่นautoexpect

อีกครั้งจากเว็บไซต์คาดหวัง

autoexpect เฝ้าดูคุณโต้ตอบกับโปรแกรมอื่นและสร้างสคริปต์ Expect ที่ทำซ้ำการโต้ตอบของคุณ สำหรับสคริปต์แบบเส้นตรง Autoexpect จะช่วยประหยัดเวลาได้มากในการเขียนสคริปต์ด้วยมือ


ขอบคุณสำหรับคำตอบ. เนื่องจากความต้องการของฉันต่ำมากคาดว่าจะเกินความเป็นจริงในกรณีของฉัน Bjorns ตอบสนองความต้องการของฉันอย่างสมบูรณ์แบบ แต่ฉันขอแนะนำให้รักษาคำตอบของคุณสำหรับคนอื่นที่ต้องการโซลูชันที่ซับซ้อนมากขึ้น
tmuecksch

+1 เพราะฉันไม่ทราบว่ามี autoexpect อยู่และได้คิดว่าช่วงการเรียนรู้คาดว่าชันเกินไปสำหรับฉันที่จะรำคาญ ฉันจะดูอีกครั้ง
Joe

7

หากสคริปต์ของคุณคาดว่าจะได้รับคำตอบเดียวหรือหลายอย่างที่คุณสามารถให้คำตอบเดียวกันนั่นก็คือ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'.

ใช้แบบนี้:

yes Me | give_a_hug.sh

3
ตัวอย่างการใช้งานทั่วไปที่น่าขันคือyes n:yes n | mv -i * somewhere/
Sam Watkins
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.