สมมติว่าฉันต้องการเขียนเชลล์สคริปต์ที่รันเพียงคำสั่งเดียว แต่คำสั่งนี้ออกแบบมาไม่ดี ไม่มีตัวเลือกบรรทัดคำสั่งใด ๆ แทนที่จะถามคำถามและรอการป้อนข้อมูลจากผู้ใช้
มีวิธีการเตรียมข้อมูลนี้ในสคริปต์หรือไม่ดังนั้นคำถามจะได้รับคำตอบโดยอัตโนมัติหรือไม่
สมมติว่าฉันต้องการเขียนเชลล์สคริปต์ที่รันเพียงคำสั่งเดียว แต่คำสั่งนี้ออกแบบมาไม่ดี ไม่มีตัวเลือกบรรทัดคำสั่งใด ๆ แทนที่จะถามคำถามและรอการป้อนข้อมูลจากผู้ใช้
มีวิธีการเตรียมข้อมูลนี้ในสคริปต์หรือไม่ดังนั้นคำถามจะได้รับคำตอบโดยอัตโนมัติหรือไม่
คำตอบ:
หากคำสั่งไม่จู้จี้จุกจิกมันควรจะทำงานกับสิ่งนี้:
command > /dev/null << EOF
<answer 1>
<answer 2>
<answer 3>
EOF
สิ่งนี้ต้องการให้คุณรู้คำตอบที่ถูกต้องล่วงหน้า
คาดว่าสามารถทำเช่นนั้น จากเว็บไซต์คาดหวัง:
Expect เป็นเครื่องมือสำหรับการทำงานอัตโนมัติของแอปพลิเคชั่นแบบโต้ตอบเช่น telnet, ftp, passwd, fsck, rlogin, tip ฯลฯ คาดว่าจะทำให้สิ่งนี้เล็กน้อย ความคาดหวังยังมีประโยชน์สำหรับการทดสอบแอปพลิเคชันเดียวกันเหล่านี้ [... ] "
มันมาพร้อมกับความช่วยเหลือมากเช่นautoexpect
อีกครั้งจากเว็บไซต์คาดหวัง
autoexpect เฝ้าดูคุณโต้ตอบกับโปรแกรมอื่นและสร้างสคริปต์ Expect ที่ทำซ้ำการโต้ตอบของคุณ สำหรับสคริปต์แบบเส้นตรง Autoexpect จะช่วยประหยัดเวลาได้มากในการเขียนสคริปต์ด้วยมือ
หากสคริปต์ของคุณคาดว่าจะได้รับคำตอบเดียวหรือหลายอย่างที่คุณสามารถให้คำตอบเดียวกันนั่นก็คือ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
yes n
:yes n | mv -i * somewhere/