私はなんとかこれを行うことができました
echo -n "command" > /dev/tty1
文字が表示され、カーソルが移動しますが、 Enterを押すと「ゴースト」になります。 、何も起こりません(stdinにはありません)。
編集:
下のスクリーンショットの真ん中に、私がこれの使用を見る理由がわかります。 (赤いキャプションのある行、黄色のキャプションのある行のすぐ下。)現在のように、メモのテキストを実際に「編集」しているわけではありません。新しいテキストを書くように求められます。これにより、(実際には)編集しているノートのテキストが置き換えられます。したがって、古いテキストをttyに貼り付けるだけで解決できると思いました。ユーザーがEnterキーを押しても、変更は行われません。 (このプログラムはPerl / MySQLにありますが、「Perlでこれを行う方法」よりも一般的な解決策を求める方が面白いと思いました。)
編集2:
以下のCコードを使用するPerlコード(意図したとおりに機能します)と新しいスクリーンショットを次に示します。これにより、疑いの余地のないことが明らかになることを願っています🙂もう一度、スクリーンショットの中央を見てください。メモのテキスト–今回は古いテキストがあります。たとえば、タイプミスを修正したいだけの場合は、メモのテキスト全体を再入力する必要はありません。
my $edit_note_text = $edit_note_data[2];
print BOLD, RED, " new text: ", RESET;
system("writevt /dev/tty "$edit_note_text"");
my $new_text = <$in>;
$new_text = fix_input($new_text);
my $set_text = "UPDATE notes SET note = "$new_text" WHERE id = $edit_note_id";
$db->do($set_text);
承認された回答:
writevt
という小さなCプログラムを見つけました それはトリックを行います。ここでソースコードを入手してください。 gcc
でコンパイルするには 最初に次の行を削除してください:
#include <lct/cline.h>
#include <lct/utils.h>
更新 。コマンドはconsole-toolsの一部になりました 、したがって、ディストリビューションで kbd を使用しない限り、より最近のシステムで利用できます。 console-toolsの代わりに 、この場合、ソースからコンパイルできます(はるかに新しいバージョンで、変更は必要ありません)。
使用法:
sudo writevt /dev/ttyN command
何らかの理由で、'r'
を使用する必要があることに注意してください (または'x0D'
)'n'
の代わりに (または'x0A'
)返品を送信します。