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
。ここでは違いはなく、メカニズムは同じです。それからvim
PIDを見つけてディレクトリを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/2
echo
/dev/pts/2
vim
私が知る限り、端末はキーボードからのみ入力を受け取り、他の方法では入力を渡すことはできません。したがって、コマンドをワーカープロセスに渡す別の方法を見つける必要があります。
echo
また、あなたの場合は、出力に改行文字を追加するので、階段を介して印刷が発生することに注意してくださいj
。に変更すると、echo -n j
出力はjjj
改行なしで - になります。