![](/img/trans.png)
[英]Python 2.7: How do I read single keypress in Linux (Including special characters)?
[英]bash scripting - read single keystroke including special keys enter and space
不確定我是否應該將它放在stackoverflow或unix.stackexchange上,但我在這里發現了一些類似的 問題 ,所以在這里。
我正在嘗試創建一個由.bashrc調用的腳本,它允許我根據單個按鍵選擇兩個選項中的一個。 這通常不會很難但我希望對應於這兩個選項的兩個鍵是空格並輸入。
這是我到目前為止所得到的:
#!/bin/bash
SELECT=""
while [[ "$SELECT" != $'\x0a' && "$SELECT" != $'\x20' ]]; do
echo "Select session type:"
echo "Press <Enter> to do foo"
echo "Press <Space> to do bar"
read -s -N 1 SELECT
echo "Debug/$SELECT/${#SELECT}"
[[ "$SELECT" == $'\x0a' ]] && echo "enter" # do foo
[[ "$SELECT" == $'\x20' ]] && echo "space" # do bar
done
如果我按下enter,space,backspace和x,我得到的是以下輸出:
:~$ bin/sessionSelect.sh
Select session type:
Press <Enter> to start/resume a screen session
Press <Space> for a regular ssh session
Debug//0
Select session type:
Press <Enter> to start/resume a screen session
Press <Space> for a regular ssh session
Debug//0
Select session type:
Press <Enter> to start/resume a screen session
Press <Space> for a regular ssh session
Debug//1
Select session type:
Press <Enter> to start/resume a screen session
Press <Space> for a regular ssh session
Debug/x/1
因此,輸入和空格都會產生一個空的SELECT。 無法區分這兩者。 我試圖在讀取選項中添加-d'D',但這沒有幫助。 也許有人可以指出我正確的方向。
bash版本將是4.2 btw。
#!/bin/bash
SELECT=""
# prevent parsing of the input line
IFS=''
while [[ "$SELECT" != $'\x0a' && "$SELECT" != $'\x20' ]]; do
echo "Select session type:"
echo "Press <Enter> to do foo"
echo "Press <Space> to do bar"
read -s -N 1 SELECT
echo "Debug/$SELECT/${#SELECT}"
[[ "$SELECT" == $'\x0a' ]] && echo "enter" # do foo
[[ "$SELECT" == $'\x20' ]] && echo "space" # do bar
done
嘗試將讀取分隔符設置為空字符串,然后檢查內置$ REPLY變量:
read -d'' -s -n1
出於某種原因,我無法指定變量。
這里有一些關於read
:
由於您正在讀取一個字符,這意味着輸入Enter將導致一個空變量。
此外,默認情況下,單詞拆分規則,輸入Space也會產生一個空變量。 好消息是你可以通過設置IFS
來處理這個部分。
將您的read
聲明更改為:
IFS= read -s -n 1 SELECT
並且在輸入Enter時期望一個空字符串而不是$'\\x0a'
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.