我用下面的代碼分配一個用戶字符變量G給出:如何設置讀命令執行而不必在shell中按下Enter按鈕?
read G
但是爲了我的劇本的執行前進,我需要按ENTER鍵。 是否有可能以某種方式設置讀取命令,使其在接收到標準輸入的一個字母后立即向下一行顯示進程?
我用下面的代碼分配一個用戶字符變量G給出:如何設置讀命令執行而不必在shell中按下Enter按鈕?
read G
但是爲了我的劇本的執行前進,我需要按ENTER鍵。 是否有可能以某種方式設置讀取命令,使其在接收到標準輸入的一個字母后立即向下一行顯示進程?
我想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)
如果你正在使用bash:
read -n1 G
你的系統默認配置和破折號使用破折號不支持此功能,因此你還需要改變你的腳本的第一行,指定您希望您使用bash:
#!/bin/bash
這不起作用,它不再等待輸入,只允許執行我的循環直到結束。 – goe 2009-11-29 18:32:47
這可能是因爲你在腳本的其他地方有錯誤。嘗試在一個新的空腳本中輸入它,你會發現它工作得很好。 – 2009-11-29 18:40:36
所以你是說,讀-n1 G應該暫停腳本,直到它從stdin接收到字符,然後繼續執行而不必等待輸入被點擊? – goe 2009-11-29 18:51:01