มีข้อความแจ้งการโต้ตอบคำตอบสคริปต์ทุบตี [ซ้ำ]


109

เป็นไปได้หรือไม่ที่สคริปต์ทุบตีจะจัดการพร้อมต์โดยอัตโนมัติซึ่งโดยปกติจะนำเสนอต่อผู้ใช้ด้วยการดำเนินการเริ่มต้น? ขณะนี้ฉันกำลังใช้สคริปต์ทุบตีเพื่อเรียกใช้เครื่องมือในตัวซึ่งจะแสดงข้อความแจ้งให้ผู้ใช้ (พร้อมท์สำหรับ Y / N) เพื่อดำเนินการให้เสร็จสิ้นอย่างไรก็ตามสคริปต์ที่ฉันเขียนจะต้อง "ลงมือทำ" อย่างสมบูรณ์ดังนั้น ฉันต้องการวิธีส่งY|Nไปยังพรอมต์เพื่อให้โปรแกรมทำงานต่อไป เป็นไปได้หรือไม่


นี่ไม่ใช่ "การเติมข้อความอัตโนมัติ" ... เหมือนที่ @unwind บอกว่าเป็น "ระบบอัตโนมัติ"
benzaita

3
ตัวอย่างการใช้yesงาน: unix.stackexchange.com/questions/47344/…
Droogans

คำตอบ:


65

นี่ไม่ใช่ "การเติมข้อความอัตโนมัติ" แต่เป็นระบบอัตโนมัติ เครื่องมือหนึ่งที่พบบ่อยสำหรับสิ่งเหล่านี้จะเรียกว่าคาดหวัง

คุณอาจได้รับเพียงแค่ป้อนข้อมูลจากyes.


3
น่าเสียดายที่ฉันไม่สามารถใช้การคาดหวังได้เนื่องจากเป็นข้อกำหนดด้านพื้นที่ที่เข้มงวดในระบบที่เรียกใช้สิ่งนี้ดังนั้นฉันจึงไม่สามารถเพิ่มแพ็คเกจพิเศษได้ แต่การวางท่อyesก็ใช้เคล็ดลับได้โชคดีที่การแจ้งเตือนทั้งหมดต้องการเพียงแค่ 'y' เท่านั้น ขอบคุณ.
TJ L

อย่างไรก็ตามYes | commandอาจไม่ได้ผลเสมอไป หากเป็นเพียงเพื่อวัตถุประสงค์ในการติดตั้งฉันก็ใช้-yเป็นตัวเลือกที่ดีกว่าและเป็นที่ต้องการ
Umesh Kaushik

169

ง่าย

echo "Y Y N N Y N Y Y N" | ./your_script

วิธีนี้ช่วยให้คุณสามารถส่งต่อลำดับของ "Y" หรือ "N" ไปยังสคริปต์ของคุณ


3
ถ้าผมต้องการที่จะส่งใด ๆNของผมจะได้ใช้วิธีนี้ แต่ฉันจำเป็นเท่านั้น Y yesเพื่อให้ฉันไปกับ น่าเสียดายที่ฉันไม่สามารถยอมรับคำตอบสองข้อได้เนื่องจากถูกต้องทั้งคู่
TJ L

3
;) ถ้าคุณต้องการส่งบางอย่างNตอนนี้คุณมีวิธีที่ดีที่จะทำ
LoïcFévrier

2
สิ่งนี้ไม่ได้ผลสำหรับฉัน การเว้นวรรคจะไม่นับเป็นบรรทัดใหม่ --- ถ้าเช่นฉันสะท้อน "Y N" มันจะให้สตริง"Y N"เป็นอินพุตไปยังพรอมต์แรกและค้างที่พรอมต์ที่สองรอให้ฉันดำเนินการให้เสร็จสิ้น ฉันพยายามเปลี่ยนช่องว่างเป็นขึ้นบรรทัดใหม่ แต่ก็ไม่ได้ผลเช่นกันยังคงให้สตริงตามตัวอักษรไปยังพร้อมต์
Temporary_user_name

52
ลองใช้printf 'y\ny\ny\n' | ./your_script. วิธีนี้คุณจะแทรกขึ้นบรรทัดใหม่ด้วยตนเองสำหรับแต่ละรายการที่คาดหวัง
Majid

8
printf '%s\n' Y Y N N Y N Y Y Nวางบรรทัดใหม่ระหว่างรายการ แต่ไม่ต้องใช้สตริงรูปแบบขนาดใหญ่
Charles Duffy

16

ฉันพบวิธีที่ดีที่สุดในการส่งอินพุตคือการใช้ cat และไฟล์ข้อความเพื่อส่งต่อข้อมูลที่คุณต้องการ

cat "input.txt" | ./Script.sh

คาดว่าไม่ได้ผลตามที่คาดไว้สำหรับฉัน นี่คือคำตอบที่ง่ายและดีที่สุดสำหรับคำถามนี้
cloudxix

12

หากคุณมีเพียง Y ที่จะส่ง:

$> yes Y |./your_script

หากคุณมีเพียง N ที่จะส่ง:

$> yes N |./your_script

9

ในสถานการณ์ของฉันฉันจำเป็นต้องตอบคำถามโดยไม่มี Y หรือ N แต่ใช้ข้อความหรือว่างเปล่า ฉันพบวิธีที่ดีที่สุดในการดำเนินการนี้ในสถานการณ์ของฉันคือการสร้างไฟล์ shellscript ในกรณีของฉันฉันเรียกมันว่า autocomplete.sh

ฉันจำเป็นต้องตอบคำถามบางอย่างสำหรับผู้ส่งออกสคีมาหลักคำสอนไฟล์ของฉันจึงมีลักษณะเช่นนี้

- นี่คือตัวอย่างเท่านั้น -

php vendor/bin/mysql-workbench-schema-export mysqlworkbenchfile.mwb ./doctrine << EOF
`#Export to Doctrine Annotation Format`                                     1
`#Would you like to change the setup configuration before exporting`        y
`#Log to console`                                                           y
`#Log file`                                                                 testing.log
`#Filename [%entity%.%extension%]`
`#Indentation [4]`
`#Use tabs [no]`
`#Eol delimeter (win, unix) [win]`
`#Backup existing file [yes]`
`#Add generator info as comment [yes]`
`#Skip plural name checking [no]`
`#Use logged storage [no]`
`#Sort tables and views [yes]`
`#Export only table categorized []`
`#Enhance many to many detection [yes]`
`#Skip many to many tables [yes]`
`#Bundle namespace []`
`#Entity namespace []`
`#Repository namespace []`
`#Use automatic repository [yes]`
`#Skip column with relation [no]`
`#Related var name format [%name%%related%]`
`#Nullable attribute (auto, always) [auto]`
`#Generated value strategy (auto, identity, sequence, table, none) [auto]`
`#Default cascade (persist, remove, detach, merge, all, refresh, ) [no]`
`#Use annotation prefix [ORM\]`
`#Skip getter and setter [no]`
`#Generate entity serialization [yes]`
`#Generate extendable entity [no]`                                          y
`#Quote identifier strategy (auto, always, none) [auto]`
`#Extends class []`
`#Property typehint [no]`
EOF

สิ่งที่ฉันชอบเกี่ยวกับกลยุทธ์นี้คือคุณสามารถแสดงความคิดเห็นว่าคำตอบของคุณคืออะไรและใช้ EOF บรรทัดว่างก็แค่นั้น (คำตอบเริ่มต้น) ปรากฎว่าเครื่องมือส่งออกนี้มี JSON ของตัวเองเพื่อตอบคำถามเหล่านี้ แต่ฉันคิดออกหลังจากที่ฉันทำสิ่งนี้ =)

ในการรันสคริปต์เพียงแค่อยู่ในไดเร็กทอรีที่คุณต้องการและรัน'sh autocomplete.sh'ในเทอร์มินัล

ในระยะสั้นโดยใช้<< EOL & EOF ร่วมกับ Return Linesคุณสามารถตอบคำถามของพรอมต์แต่ละข้อได้ตามความจำเป็น แต่ละบรรทัดใหม่เป็นคำตอบใหม่

ตัวอย่างของฉันแสดงให้เห็นว่าสามารถทำได้อย่างไรพร้อมกับความคิดเห็นโดยใช้อักขระ `เพื่อให้คุณจำได้ว่าแต่ละขั้นตอนคืออะไร

สังเกตข้อดีอีกอย่างของวิธีนี้คือคุณสามารถตอบได้มากกว่าแค่ Y หรือ N ... อันที่จริงคุณสามารถตอบด้วยช่องว่างได้!

หวังว่านี่จะช่วยใครบางคนได้


4

มียูทิลพิเศษในตัวสำหรับสิ่งนี้ - ' ใช่ '

หากต้องการตอบคำถามทั้งหมดด้วยคำตอบเดียวกันคุณสามารถเรียกใช้

yes [answer] |./your_script

หรือคุณสามารถใส่ไว้ในสคริปต์ของคุณเพื่อให้มีคำตอบเฉพาะสำหรับแต่ละคำถาม


ฉันจะทำสิ่งนั้นภายในสคริปต์ได้อย่างไร ฉันต้องการระบุคำตอบที่แตกต่างกันสำหรับแต่ละคำถาม
Sengo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.