現在押しているキーを標準出力として印刷し、1行ずつ読み込みます。

現在押しているキーを標準出力として印刷し、1行ずつ読み込みます。

キーボードでどのキーを押したかを知り、その情報を標準出力として印刷したいと思います。

これを行うことができるツールはです。しかし、データを次にshowkey渡す場合:showkeyread

while read line; do
  echo "$line" | otherprog
done <`showkey -a`

または

showkey -a | while read line; do
  echo "$line" | otherprog
done

その後、showkey合計140文字が入力されるのを待ってから、バッファリングされた情報をに送信しますread

showkey -aバッファリングなしで押したキーを1行ずつ印刷します。

  1. バッファリングする理由は何ですか?
  2. showkey実際に出力を1行ずつ読み取ることができるように、これらのバッファリングを防ぐにはどうすればよいですか?
  3. どんな選択肢がありますかshowkey
  4. 押したキーを直接読むことができるファイルはありますか?
  5. データをに渡す正しい方法は何ですかread

解決策:

使ったロニックスのソリューションそしてそれを私の簡単なキーボードに含めます:D!

stdbuf -o0 showkey -a | while read line; do
  perl -e 'print sprintf "%030s\n",shift' "$line" | aplay &> /dev/null &
done

レーザー船の版:

#!/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

同じフォルダに、いくつかのレーザーmp3ファイルをダウンロードというフォルダにmp3

ベストアンサー1

showkey以下を使用して、出力をバッファリングされていない状態に設定してみてください。stdbuf注文する:

stdbuf -o0 showkey -a | cat -

ラインをバッファリングする代わりに、キーを押すと出力が表示されます。

stdbufstdinstdoutのバッファリングを調整でき、stderrに設定してまったくラインバッファまたはブロックバッファ、選択可能なブロックサイズがあります。とても便利です。

おすすめ記事