bash เทียบเท่ากับคำสั่งหยุดชั่วคราวของ DOS คืออะไร?


13

ฉันต้องการหยุดชั่วคราวในเชลล์สคริปต์เพื่อแสดงคำเตือนก่อนดำเนินการต่อ ตัวอย่างเช่นบน DOS มันจะเป็นดังนี้:

doit.bat:

[...]
echo 'Are you sure? Press Ctrl-C to abort, enter to continue.'
pause
[...]

ฉันจะทำสิ่งนี้ในทุบตีได้อย่างไร สำหรับช่วงเวลาที่คำสั่ง sleep นั้นดูเหมือนจะทำกลอุบายและเรียบง่ายพอ แต่ก็ไม่ใช่ความคิดที่แน่นอน:

doit.sh

[...]
echo 'Are you sure? Press Ctrl-C to abort.'
sleep 3
[...]

คำตอบ:


10

บางสิ่งบางอย่างตามแนวของ

echo -n "prompt"  #'-n' means do not add \n to end of string
read              # No arg means dump next line of input

14
ใน Bash สามารถย่อให้สั้นลงread -p "prompt"ได้ รายละเอียดเพิ่มเติมเกี่ยวกับการสร้างเปลือกอินสามารถเรียกดูได้ด้วยคำสั่งเช่นhelp help read
Lekensteyn

@Lekensteyn - นั่นคือไม่มีบรรทัดใหม่ต่อท้ายแม้ว่า
Matt H

@MattH เช่นเดียวกับและecho -n printfหากคุณกด Enter คุณจะได้รับการขึ้นบรรทัดใหม่
Lekensteyn

ที่ใช้งานไม่ได้กับ Ubuntu 12.04 - อ่านต้องใช้ argumenst
ses

@ses เมื่อวันที่ 12.04.4 การใช้bashไม่มีข้อกำหนดที่อ่านมีข้อโต้แย้ง การใช้sh(ซึ่งมักจะเรียกใช้bashในshโหมดที่เข้ากันได้) readต้องมีการโต้แย้ง หากคุณเริ่มต้นสคริปต์ด้วย#!/bin/shคุณจะเห็นพฤติกรรมหลัง
Huckle

2

read -p "Press any key to continue or CTRL-C to abort"ทำงานได้ดีภายใต้ 14.04 ในสคริปต์ของฉัน ตามที่ @Lekensteyn ระบุไว้ในความคิดเห็นด้านบนดูเหมือนว่านี่เป็นกรณีตั้งแต่ 12.04.4 สถานะหน้า 'ช่วยอ่าน':

-p prompt   output the string PROMPT without a trailing newline before
            attempting to read

1

การใช้สิ่งนี้ที่ฉันชอบคือการตั้งค่าการหมดเวลาเริ่มต้นเพื่อให้สคริปต์สามารถทำงานแบบอัตโนมัติได้:

echo "Press any key to continue..."
read -n1 -t5 any_key

ที่อยู่:

  • -n1 บอกให้อ่านเพื่อยอมรับอักขระเดี่ยวใด ๆ
  • -t5 บอกให้รอให้อินพุตสูงสุด 5 วินาที

ฉันทำงานโดยเฉพาะกับ Bash ภายใต้ CentOS ดังนั้นฉันจึงไม่สามารถรับรองการทำงานกับตัวแปร Linux อื่น ๆ ได้ แต่เนื่องจากเป็น Bash ฉันจึงคาดหวังให้มันทำงานได้ ฉันชอบที่จะรู้แน่นอนถ้ามัน! :)


0

Simples รอที่จะหยุดสคริปต์คือการโทรkill -STOP $$จากสคริปต์: หลังจากหยุดสคริปต์จะทำงานต่อไปหลังจากได้รับสัญญาณ -CONT

#!/bin/bash
echo "$0 stopping now"
kill -STOP $$
echo "$0 continues its work"

เราจะส่งCONTสัญญาณไปยังสคริปต์ได้อย่างไร
David Foerster

-2
echo "press enter to continue"
read unusedVariable
echo "running these 3 lines in .sh file, this echo will never be seen, unless you have a really slow computer"

วาง 3 บรรทัดเหล่านี้ในไฟล์. sh และเรียกใช้


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