Misalkan Anda memiliki terminal emulator (T1) terbuka dengan PID 6350.
Dari terminal lain, ketikkan perintah ini (C1):
echo "ls\n" > /proc/6350/fd/0
Ini menulis ls
dan baris baru di T1 tetapi tidak menjalankannya. Mengapa?
Saya juga mencoba menggunakan cat|bash
dengan echo "ls\n" > /proc/catid/fd/0
tetapi masih belum dieksekusi.
Bagaimana saya bisa mengulang perintah ke terminal lain dan menjalankan perintah?
kemungkinan jawaban:
$ mkfifo toto;
$ bash < toto;
$ echo "ls" > toto;
Dalam hal ini Anda tidak dapat menulis lagi secara langsung di terminal (semuanya ditampilkan dengan cara yang sama dengan perintah (C1) yang ditampilkan di terminal ini.
terminal
stdout
command
file-descriptors
rvlander
sumber
sumber
Jawaban:
Ada utilitas baris perintah yang disebut
ttyecho
yang dapat mengirim perintah ke terminal lain (tty / pts) dan menjalankan perintah.Lihat: Utilitas untuk Mengirim Perintah atau Data ke Terminal Lain (tty / pts)
Lihat juga:
ttyecho
kode sumber di github .Perintah tty lain yang menarik adalah
selector
, pencocokan pola interaktif real-time di konsol yang memperbarui buffer input tty.Lihat: pemilih - PENCARIAN DINAMIS DI KONSOL
sumber
ttyecho
kode sumber di github tampaknya rusak. Namun, sekarang tampaknya tersedia di github.com/osospeed/ttyecho .Ketika Anda mengeluarkan tulisan ke
/dev/pts/X
(/proc/6350/fd/0
,1
dan2
hanya merupakan symlink ke sana), apa yang terjadi adalah hal yang persis sama yang terjadi ketika proses6350
(atau salah satu dari anak-anaknya, yang bercabang-cabang) menghasilkan sesuatu: ia menulis ke terminal.Jika Anda mencoba membaca dari perangkat itu (
cat < /dev/pts/X
), hal-hal yang funky akan terjadi. Anda harus melihat hal-hal yang Anda ketik di shell asli muncul. (Sangat mungkin hanya setelah baris baru pertama yang Anda ketikkan - Saya menduga program terminal (xterm
atau apa pun yang Anda gunakan) melakukan beberapa penyangga baris, dan6350
shell yang diblokirread
akan mendapatkan bagian itu; kemudian shell mungkin, atau mungkin tidak, menangkan bacaan selanjutnya, tapi saya mungkin sangat salah tentang hal ini.)Masalahnya adalah: ketika Anda membaca dari atau menulis ke perangkat itu, Anda tidak berbicara dengan shell lain yang menggunakannya. Anda sedang berbicara dengan terminal emulator (
xterm
misalnya). Hanya emulator terminal yang dapat menyuntikkan data ke saluran tersebut (apa yang dibaca shell), dan semua yang ditulis shell masuk ke terminal. Memasang shell kedua tidak mengubah itu.Jika Anda ingin menyuntikkan perintah ke dalam
6530
proses itu, itu harus dilakukan melalui terminal (apakah itu aplikasi X11 atau yang lainnya).Bacaan yang disarankan: Apa perbedaan persis antara 'terminal', 'shell', 'tty' dan 'konsol'?
sumber
cat /dev/pts/x
, Anda tidak perlu<
) Saya mendapatkan surat ketat bergantian antara terminal./proc/6350/fd/0
juga simlink ke orang tua stdinprocess 6350
yang merupakan terminal. Saya kira itu sama untuk aplikasi berjendela?