RangerのようなCLIターミナルアプリケーションのキーストロークを自動化するには?

RangerのようなCLIターミナルアプリケーションのキーストロークを自動化するには?

Rangerを実行してPIDを取得したら、Rangerにキーストロークを送信したいと思います。

出力ps aux | grep '[/]usr/bin/python -O /usr/bin/ranger'

chris     5054  3.1  0.1 116248 27828 pts/0    S+   16:57   0:00 /usr/bin/python -O /usr/bin/ranger

次からhttps://serverfault.com/a/178470/135542j、値をSTDINに送信すると、出力が混在しているecho "j" > /proc/5440/fd/0ようですj(コマンドを数回実行した後)。

ここに画像の説明を入力してください。

jしかし、キーボードを押すと正しく反応します。

ベストアンサー1

このため、

echo "j" > /proc/5440/fd/0 

実際には次のようになります(pts状況によっては数値が異なる場合があります)。

echo "j" > /dev/pts/2 

説明する:

そうrangerでなかったので走っていますvim。ここでは違いはなく、メカニズムは同じです。それからvimPIDを見つけてディレクトリを6466見ました。/proc/6466/fd

$ ls -l /proc/6466/fd
lrwx------ 1 minimax minimax 64 Nov 20 01:20 0 -> /dev/pts/2
lrwx------ 1 minimax minimax 64 Nov 20 01:20 1 -> /dev/pts/2
lrwx------ 1 minimax minimax 64 Nov 20 01:20 2 -> /dev/pts/2

プロセスのすべてのファイル記述子は、vim現在の端末へのシンボリックリンクです。したがって、これは文字通り「コマンドの出力をターミナルファイルにリダイレクトする」echo "j" > /proc/5440/fd/0に翻訳されます。プロセスの標準入力ではありません。echo "j" > /dev/pts/2echo/dev/pts/2vim

私が知る限り、端末はキーボードからのみ入力を受け取り、他の方法では入力を渡すことはできません。したがって、コマンドをワーカープロセスに渡す別の方法を見つける必要があります。

echoまた、あなたの場合は、出力に改行文字を追加するので、階段を介して印刷が発生することに注意してくださいj。に変更すると、echo -n j出力はjjj改行なしで - になります。

おすすめ記事