Bash tương đương với lệnh tạm dừng của DOS là gì?


13

Tôi cần tạm dừng trên một kịch bản shell để hiển thị cảnh báo trước khi tiếp tục. Chẳng hạn, trên DOS nó như thế này:

doit.bat:

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

Làm thế nào tôi có thể làm điều này trên bash? Hiện tại, một lệnh ngủ dường như thực hiện thủ thuật và đủ đơn giản nhưng không chính xác là ý tưởng:

doit.sh

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

Câu trả lời:


10

một cái gì đó dọc theo dòng

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

14
Trong Bash, điều này có thể được rút ngắn thành read -p "prompt". Chi tiết khác về shell dựng sẵn có thể được lấy bằng helplệnh, vd help read.
Lekensteyn

@Lekensteyn - Mặc dù vậy không có dòng mới.
Matt H

@MattH Chỉ thích echo -nprintf. Nếu bạn nhấn Enter, bạn sẽ nhận được một dòng mới.
Lekensteyn

mà không làm việc cho ubuntu 12.04 - đọc đòi hỏi argumenst
SES

@s Ngày 12.04.4 sử dụng bashkhông có yêu cầu đọc có đối số. Sử dụng sh(thường gọi bashtrong shchế độ tương thích) readđòi hỏi một đối số. Nếu bạn bắt đầu tập lệnh của mình, #!/bin/shbạn sẽ thấy hành vi sau
Huckle

2

read -p "Press any key to continue or CTRL-C to abort"hoạt động tốt dưới 14.04 trong các kịch bản của tôi. Như @Lekensteyn đã nêu trong nhận xét ở trên, có vẻ như đây là trường hợp kể từ ngày 12.04.4. Trang 'trợ giúp đọc' nêu rõ:

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

1

Cách sử dụng yêu thích của tôi là đặt thời gian chờ mặc định, để tập lệnh cũng có thể chạy không cần giám sát:

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

Ở đâu:

  • -n1 nói cho người đọc chấp nhận bất kỳ ký tự đơn
  • -t5 bảo nó đợi tối đa 5 giây cho đầu vào

Tôi làm việc gần như độc quyền với Bash theo CentOS, vì vậy tôi không thể đảm bảo việc này hoạt động trên các biến thể Linux khác, nhưng vì đó là Bash, tôi sẽ hy vọng nó hoạt động. Tôi rất muốn biết chắc chắn nếu có! :)


0

Các mô phỏng chờ dừng tập lệnh là gọi kill -STOP $$từ tập lệnh: Sau khi tạm dừng, tập lệnh sẽ tiếp tục công việc sau khi nhận được tín hiệu -CONT.

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

Làm thế nào để một người gửi CONTtín hiệu đến kịch bản?
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"

đặt 3 dòng này trong tệp .sh và chạy nó


1
-1 Cái này phải làm gì và tại sao? Tại sao đầu ra của echolệnh cuối cùng sẽ không hiển thị và nó phải làm gì với tốc độ của máy tính?
David Foerster
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.