Bagaimana cara mendapatkan output di dalam `screen` ke skrip?

33

Saya memiliki screeninstance yang berjalan, dan saya perlu menjalankan beberapa kode di dalamnya screen, dan mendapatkan hasilnya ke skrip saya.

Bagian pertama cukup mudah, saya hanya screen -S session_name -X eval 'stuff "$cmd"\015'.
(Saya memodifikasi baris yang saya temukan dalam skrip )

Bagian kedua, mengeluarkan output, lebih rumit. Bagaimana saya bisa mendapatkan seluruh output, berapa pun ukurannya?

1ace
sumber
1
Terkait: penjelasanscreen -X stuff … ; pertanyaan serupa dengan Anda .
Gilles 'SANGAT berhenti menjadi jahat'
Terima kasih :) Tautan kedua dijelaskan mengapa perintah pertama harus dibuat stuff, yang merupakan hal yang sulit saya pahami.
1

Jawaban:

29

Anda bisa mulai screendengan -Lopsi. Ini akan menyebabkan layar membuat file screenlog.n(bagian n adalah angka, dimulai dengan nol) di direktori kerja saat ini.

Dalam kasus Anda ini akan terlihat seperti: screen -S session_name -L -X eval 'stuff "$cmd"\015'

Selama Anda ingat untuk membersihkan setelah itu, ini harus sesuai dengan apa yang Anda cari.

Untuk baris terakhir log, dapat dengan mudah diperoleh tail -1 screenlog.0, atau seluruh log dapat diuraikan seperti yang Anda inginkan.

NJ
sumber
Satu hal, meskipun: screenperintah yang saya berikan adalah hanya untuk mengirim perintah. Untuk memulai screen, saya menggunakan screen -dmS name program;-)
1
22

Satu lagi nuansa yang mungkin membantu di masa depan: Jika Anda berada di sesi layar, Anda dapat secara interaktif meminta file log yang akan dibuat. Tekan ctrl- a H(Kontrol-A diikuti dengan huruf H) untuk meminta layar untuk mulai membuang jendela apa pun yang Anda masuk ke file log.

rickumali
sumber
5
Tidak tahu apakah itu karena versi yang lebih baru tetapi man screenkata saya , saya harus mengetik CA H, tanpa Kontrol untuk H. Sedih saja, bahwa ini tidak menangkap log sebelumnya.
Matmarbon
2
Kamu benar! CA H untuk membuat file log. Harap dicatat bahwa huruf kapital H (huruf kecil h menghasilkan hanya hardcopy layar saat ini).
rickumali
3
Harap perbarui jawaban untuk CA H. Pencari yang akan datang mungkin menyesatkan dan kehilangan jawaban yang benar.
gc5
Adakah yang tahu cara mengirim perintah melalui skrip? Seperti di kirim kontrol + a dan kemudian H setelah sepersekian detik.
Zach W.