我想知道在我的键盘上按下了哪些键并将信息打印到标准输出。
可以做到这一点的工具是showkey. 但是,如果我想将数据传递showkey给read:
while read line; do
echo "$line" | otherprog
done <`showkey -a`
Run Code Online (Sandbox Code Playgroud)
或者
showkey -a | while read line; do
echo "$line" | otherprog
done
Run Code Online (Sandbox Code Playgroud)
然后showkey等待,直到输入了 140 个字符的总和,然后将缓冲的信息发送到read。
showkey -a 逐行打印按下的键,没有任何缓冲。
showkey真正逐行读取的输出?showkey吗?read?我使用了lornix的解决方案并将其包含在我的简单键盘键盘中:D!
stdbuf -o0 showkey -a | while read line; do
perl -e 'print sprintf "%030s\n",shift' "$line" | aplay &> /dev/null &
done
Run Code Online (Sandbox Code Playgroud)
镭射版:
#!/bin/bash
MP3=(); for i in mp3/*.mp3; do MP3+=("$i"); done
NMP3=${#MP3[@]}
stdbuf -o0 showkey -a 2>/dev/null | while read line; do
[ -z "$line" ] || ! [[ $line =~ ^[0-9] ]] && continue
NUM="$(echo "$line" | awk '{print $2}')"
mplayer "${MP3[$(($NUM % $NMP3))]}" &>/dev/null &
done
Run Code Online (Sandbox Code Playgroud)
在同一文件夹中,将一些激光 mp3 文件下载到名为mp3.
尝试showkey使用以下stdbuf命令将输出设置为非缓冲:
stdbuf -o0 showkey -a | cat -
Run Code Online (Sandbox Code Playgroud)
将在按下键时显示输出,而不是缓冲一行。
stdbuf可以调整stdin、stdout和的缓冲stderr,将它们设置为none、line buffered或block buffered,并具有可选择的块大小。非常便利。
| 归档时间: |
|
| 查看次数: |
2035 次 |
| 最近记录: |