Saya telah mencari untuk menemukan cara untuk mengirim perintah ke sesi layar terpisah. Sejauh ini baik. Inilah yang saya buat:
$ screen -S test -p 0 -X stuff 'command\n'
Perintah ini berfungsi sebagaimana mestinya. Tapi, saya juga ingin output dari itu, bergema langsung di depan mata saya (tidak perlu .log
file atau sesuatu, saya hanya ingin output).
Menggunakan screen -L
perintah, bukan opsi.
linux
ubuntu
gnu-screen
Robin
sumber
sumber
screen
? Bukankah ini proses anak dibuat untuk apa?Jawaban:
Gunakan pipa pertama keluar pertama:
Gunakan operator pengalihan. Redirect output perintah ke / tmp / test misalnya seperti ini:
Kemudian di shell lain
Catatan Anda mungkin juga ingin mengarahkan ulang pesan kesalahan menggunakan operator 2> & 1 .
Contoh
Seperti yang diminta dalam komentar, mari kita asumsikan kita memiliki skrip php yang menerima input pengguna dan mencetak beban server pada input "status":
Anda membuat dua fifos:
Anda memanggil layar:
Di konsol lain, sebut saja konsol 2 Anda mengetahui nama layar Anda:
Di konsol 2 Anda mengirim perintah ke layar:
Anda melihat perintah muncul di layar. Sekarang di konsol 2 Anda dapat mengirim perintah ke proses php Anda:
dan baca darinya:
sumber
Saya memiliki skrip python yang melacak banyak sesi layar terpisah dan menangkap output dari masing-masing (ketika perintah pemanfaatan seperti gratis, -bn2 atas, iostat secara berkala dikirim melalui 'barang').
Alih-alih mengarahkan ke file dan, dengan demikian, mengelola setidaknya satu file per sesi layar terpisah ... Saya hanya mengarahkan ke tty / pts apa pun yang digunakan sesi orang tua saya.
Langkah # 1: Mulai sesi layar baru (dengan nama yang dapat dibaca manusia) dalam mode terpisah.
Langkah # 2: Kirim perintah Anda (saya akan menggunakan perintah 'free -g' bersama dengan 'uname -r') melalui barang. Penting untuk menentukan jendela yang ingin Anda gunakan (dalam kasus kami, jendela pertama dan satu-satunya) dengan -p.
Langkah # 3: Langkah di atas hanya mengirim teks perintah. Kita juga perlu mengirim carriage return ke sesi layar terpisah ini agar shell menjalankan perintah kita. Karakter ASCII 015 adalah carriage return pada kebanyakan sistem * nix.
Langkah # 4: Mengarahkan output sesi layar terpisah kami ke tty / pts kami saat ini:
Output dari Langkah # 4 akan terlihat seperti ini:
Meskipun ini tampaknya sedikit terlibat, prosesnya mudah skrip. Dengan python, saya dapat mengurai output dari Langkah # 4 dan hanya menangkap data yang saya pedulikan.
Memilih skenario sederhana seperti mengambil detail IP, saya menulis contoh skrip untuk menunjukkan konsep di atas. Jangan ragu untuk mengganti dan mengotak-atik sesuai keinginan Anda.
Contoh skrip python untuk mendapatkan detail IP dari sesi layar terpisah:
Skrip di atas beraksi:
sumber
screen -X logfile /tmp/something
;screen -X log on
;screen -X stuff "command param"
;screen -X log off
untuk bekerja lebih baik dalam skenario itu.Contoh:
sumber