2012-01-04 31 views

Trả lời

5

Trong ksh về cơ bản bạn có thể làm:

stty raw 
REPLY=$(dd bs=1 count=1 2> /dev/null) 
stty -raw 
12

Trong bash, read có thể làm điều đó:

read -n1 ans 
+0

cung cấp cho '0403-010 Cờ được chỉ định không hợp lệ đối với lệnh này.' lỗi. – footy

+0

@footy, lệnh xây dựng sẵn của bash có tùy chọn -n. Bạn đang sử dụng vỏ gì? –

+0

@glennjackman ksh shell Tôi đang sử dụng – footy

7

read -n1 công trình cho bash

Chế độ stty raw ngăn ctrl-c làm việc và có thể khiến bạn bị kẹt trong một vòng lặp đầu vào mà không có lối thoát. Ngoài ra trang người đàn ông nói stty -raw không được đảm bảo trả lại thiết bị đầu cuối của bạn về cùng trạng thái.

Vì vậy, hãy xây dựng trên dtmilano's answer sử dụng stty -icanon -echo tránh những vấn đề đó.

#/bin/ksh 
## /bin/{ksh,sh,zsh,...} 

# read_char var 
read_char() { 
    stty -icanon -echo 
    eval "$1=\$(dd bs=1 count=1 2>/dev/null)" 
    stty icanon echo 
} 

read_char char 
echo "got $char" 
Các vấn đề liên quan