Saya berhasil melakukan ini
echo -n "command" > /dev/tty1
Huruf muncul, dan kursor bergerak, tetapi itu adalah "hantu" – jika Anda menekan Enter , tidak ada yang terjadi (mereka tidak ada di stdin).
Sunting:
Di tengah tangkapan layar di bawah, Anda melihat mengapa saya melihat penggunaan ini. (Baris dengan keterangan merah, tepat di bawah garis dengan keterangan kuning.) Seperti sekarang, Anda tidak benar-benar "mengedit" teks catatan; Anda hanya diminta untuk menulis teks baru, yang akan menggantikan teks catatan yang (tidak benar-benar) Anda edit. Jadi, saya pikir itu bisa diperbaiki dengan hanya menempelkan teks lama ke dalam tty:jika pengguna menekan enter, tidak ada modifikasi yang dilakukan. (Program ini menggunakan Perl/MySQL, tetapi saya pikir akan lebih menarik untuk meminta solusi umum daripada "bagaimana saya melakukannya di Perl".)
Sunting 2 :
Berikut adalah kode Perl, yang menggunakan kode C di bawah ini (berfungsi persis seperti yang dimaksudkan), serta tangkapan layar baru – semoga ini akan memperjelas hal-hal yang tidak diragukan lagi Sekali lagi, lihat bagian tengah tangkapan layar, tempat pengeditan dilakukan teks catatan – kali ini, teks lama ada di sana, misalnya jika Anda hanya ingin memperbaiki kesalahan ketik, Anda tidak perlu mengetik ulang seluruh teks catatan.
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);
Jawaban yang Diterima:
Saya baru saja menemukan program C kecil bernama writevt
yang melakukan trik. Ambil kode sumbernya di sini. Untuk membuatnya kompilasi dengan gcc
hapus saja baris berikut terlebih dahulu:
#include <lct/cline.h>
#include <lct/utils.h>
Perbarui . Perintah sekarang menjadi bagian dari console-tools , sehingga tersedia di sistem yang lebih baru, kecuali jika distribusi Anda menggunakan kbd bukannya console-tools , dalam hal ini Anda dapat mengompilasinya dari sumber (versi yang jauh lebih baru, tidak perlu modifikasi).
Penggunaan:
sudo writevt /dev/ttyN command
Perhatikan bahwa, untuk beberapa alasan, Anda harus menggunakan 'r'
(atau 'x0D'
) bukannya 'n'
(atau 'x0A'
) untuk mengirim pengembalian.