2012-02-28 40 views
46

Tôi có thể yêu cầu người dùng nhấn Nhập bằng cách sử dụng read và yêu cầu anh chờ bằng cách gọi sleep. Nhưng tôi không thể nghĩ ra một cách để làm cả hai cùng một lúc. Tôi muốn người dùng được cung cấp các lựa chọn:Nhấn enter hoặc đợi 10 giây để tiếp tục

Nhấn Ctrl + C để Hủy bỏ, Nhập để tiếp tục hoặc chỉ chờ 10 giây

Làm thế nào tôi có thể làm điều đó?

Trả lời

89

Trong bash, read có một lựa chọn -t nơi bạn có thể chỉ định một thời gian chờ. Từ manpage:

read [-ers] [-u fd] [-t timeout] [-a aname] [-p prompt] [-n nchars] [-d delim] [name ...]

-t timeout: nguyên nhân đọc cho thời gian ra và gửi lại thất bại nếu một dòng hoàn toàn của đầu vào không được đọc trong thời gian chờ giây. Tùy chọn này không có hiệu lực nếu đọc không đọc đầu vào từ đầu cuối hoặc đường ống.

Transcript bên dưới (mà không cần nhấn ENTER):

$ date ; read -t 10 -p "Hit ENTER or wait ten seconds" ; echo ; date 
Tue Feb 28 22:29:15 WAST 2012 
Hit ENTER or wait ten seconds 
Tue Feb 28 22:29:25 WAST 2012 

khác, nhấn Enter sau một vài giây:

$ date ; read -t 10 -p "Hit ENTER or wait ten seconds" ; date 
Tue Feb 28 22:30:17 WAST 2012 
Hit ENTER or wait ten seconds 
Tue Feb 28 22:30:19 WAST 2012 

Và khác, nhấn CTRL-C:

$ date ; read -t 10 -p "Hit ENTER or wait ten seconds" ; echo ; date 
Tue Feb 28 22:30:29 WAST 2012 
Hit ENTER or wait ten seconds 
+4

Tôi hoàn toàn thích nó khi câu trả lời chi tiết như thế này được đưa ra. Kudos cho bạn! – Brian

+0

ubuntu. -t - tuỳ chọn bất hợp pháp – ses

+0

@ses, hãy đảm bảo bạn đang sử dụng nội trang dựng sẵn, không phải một số công cụ bên ngoài. – paxdiablo

13

Nội dung dựng sẵn read có thời gian chờ.

read -t 10 

sẽ làm điều đó

1

Từ bash reference manual:

read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt][-t timeout][-u fd] [name ...]

Các vấn đề liên quan