2009-11-29 71 views

回答

2

我想dd也許能做到這一點,所以我嘗試過了,並沒有取得任何進展。但是,谷歌發現this對我來說,我在這裏將它改編:

readOne() { 
    local oldstty 
    oldstty=$(stty -g) 
    stty -icanon -echo min 1 time 0 
    dd bs=1 count=1 2>/dev/null 
    stty "$oldstty" 
} 

在腳本的開頭,一旦定義這個功能,那麼你可以使用它像這樣:

char=$(readOne) # get the character 
echo $char   # print the character (or you can do something else with it) 
5

如果你正在使用bash:

read -n1 G 

你的系統默認配置和破折號使用破折號不支持此功能,因此你還需要改變你的腳本的第一行,指定您希望您使用bash:

#!/bin/bash 
+0

這不起作用,它不再等待輸入,只允許執行我的循環直到結束。 – goe 2009-11-29 18:32:47

+0

這可能是因爲你在腳本的其他地方有錯誤。嘗試在一個新的空腳本中輸入它,你會發現它工作得很好。 – 2009-11-29 18:40:36

+0

所以你是說,讀-n1 G應該暫停腳本,直到它從stdin接收到字符,然後繼續執行而不必等待輸入被點擊? – goe 2009-11-29 18:51:01