BashスクリプトのLinux showkeyユーティリティはデータを返しません。

BashスクリプトのLinux showkeyユーティリティはデータを返しません。

シェルでこのshowkey -aコマンドを実行すると、コマンドが実行され、リアルタイムで対話できることが少し混乱します。

下記をご覧ください

timeout 10 /usr/bin/showkey -a

Press any keys - Ctrl-D will terminate this program

t   116 0164 0x74
a    97 0141 0x61
s   115 0163 0x73
d   100 0144 0x64
f   102 0146 0x66
g   103 0147 0x67
j   106 0152 0x6a
f   102 0146 0x66
k   107 0153 0x6b
l   108 0154 0x6c
d   100 0144 0x64

このコマンドをシェルスクリプトに追加すると、出力は表示されません。つまり、スクリプトまたはスクリプト内で実行されるコマンドと対話することはできません。

これは私のbashスクリプトです。

#!/bin/bash
timeout 10 /usr/bin/showkey -a
exit 0

このスクリプトを実行すると、10秒待ってからシェルが終了します。押したキー、コードを表示してユーザーと対話するにはどうすればよいですか?

私がこれをしたいのは、キーボードテストを実行する前にスクリプトが多くの作業を実行する必要があり、キーボードテスト後にスクリプトが実行する必要があるさまざまなタスクがあるためです。どこでも答えが見つからないので、最後の手段としてここに質問を残します。誰かが助けることができることを願っています。

答え1

このコマンドはshowkeyコンソールデバイスから読み込まれます。 subshel​​lで起動する場合は、showkeystdinをリダイレクトする必要があります。

#!/usr/bin/env bash
/usr/bin/showkey -a </dev/stdin

を使用するには、timeoutコマンドがshowkeyTTYから読み取られ、TTY信号を受信できるようにします。

#!/usr/bin/env bash
timeout --foreground 10 /usr/bin/showkey -a </dev/stdin

関連情報