Tôi muốn có tùy chọn tương tự như getche()
trong c. Làm thế nào tôi có thể đọc chỉ là một đầu vào ký tự đơn từ dòng lệnh.cách đọc chỉ một ký tự đơn trong tập lệnh shell
Sử dụng read
lệnh chúng ta có thể làm điều đó không?
Tôi muốn có tùy chọn tương tự như getche()
trong c. Làm thế nào tôi có thể đọc chỉ là một đầu vào ký tự đơn từ dòng lệnh.cách đọc chỉ một ký tự đơn trong tập lệnh shell
Sử dụng read
lệnh chúng ta có thể làm điều đó không?
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
Trong bash, read
có thể làm điều đó:
read -n1 ans
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"
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
@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ì? –
@glennjackman ksh shell Tôi đang sử dụng – footy