GNU/Linux >> Belajar Linux >  >> Linux

Membangun Perintah Dengan Memasukkan String Ke A Tty?

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.


Linux
  1. Memanipulasi teks pada baris perintah dengan sed

  2. vim Tutorial dengan Contoh Perintah

  3. Hapus kemunculan string dalam file teks

  1. Konversikan string ke heksadesimal pada baris perintah

  2. Cara mengedit file teks di terminal saya

  3. Perintah Linux untuk mengulang string sebanyak n kali

  1. Cara Menggunakan Perintah Grep untuk Menemukan Teks di File

  2. Cara Menulis Teks Pada Gambar menggunakan Perintah Linux

  3. Perintah Untuk Mencetak Hanya 3 Karakter Terakhir Dari Sebuah String?