Saya ingin meluncurkan beberapa aplikasi di dalam sesi layar tetapi dari skrip.
Tanpa skrip saya hanya akan meluncurkan layar, kemudian buka N windows dengan crtl-ac dan jalankan program di setiap windows.
Saya mencoba yang berikut ini
screen -d -m -S test
screen -S test -X exec tail -f /var/log/messages
screen -S test -X screen
screen -S test -X exec tail -f /var/log/xinetd.log
Tapi ketika saya pasang, sesi tail tidak berjalan. Jika saya melampirkan sesi setelah screen -d -m -S startup
dan lari screen -S startup -X exec tail -f /var/log/messages
dari terminal lain, itu berhasil.
Apakah saya melewatkan sesuatu?
Edit setelah jawaban AlexD:
Solusi setengah bekerja adalah
screen -d -m -S test tail -f /var/log/messages
screen -S test -X screen tail -f /var/log/xinetd.log
Perintah chaining screen (yang setelah -X) dengan perintah ini bekerja sementara exec tidak mungkin karena exec mengharapkan jendela saat ini akan didefinisikan sementara tidak ada saat ini ketika layar terlepas. Terima kasih kepada AlexD untuk tips ini.
Tetapi ada efek samping yang aneh: ketika program berhenti (jika Anda melampirkan sesi layar dan crtl-c ekor, atau membunuh ekor) jendela layar akan menutup.
Jadi perilakunya tidak sama dengan Crtl-A c dan jalankan perintah
Efek samping lainnya adalah Anda tidak dapat mengaitkan 2 perintah
sumber
screen
selalu berakhir ketika perintah yang diluncurkan berakhir - itu adalah fitur normal dari alat :) ..jadi jika Anda menjalankanscreen top
, ketika Anda berhentitop
,screen
akan berhenti jugaJawaban:
The
screen -S test -X screen command
Perintah adalah apa yang Anda perlu menambahkan jendela untuk sesi daemon Anda, tetapi tidak untuk alasan yang Anda berikan. Ini bekerja karena -X mengambil perintah layar dan bukan perintah shell, dan perintah layar untuk membuat jendela disebut, membingungkan, layar. Tidak ada perintah layar exec. Tidak ada chaining juga, kecuali jika Anda membangun perintah Anda menggunakan skrip shell (seperti iniscreen -S script -X screen sh -c 'command1; command2;'
:).Memanggil
screen -S test -X screen
tanpa perintah tidak ada gunanya karena perintah default adalah shell, dan sekali Anda telah menghasilkan shell, Anda tidak memiliki cara noninteraktif (dan tidak licik) untuk menjalankan perintah di dalam shell itu. Lebih baik menjalankan perintah itu sendiri, tanpa shell interaktif. Efek sampingnya adalah ketika perintah keluar, jendela layar tidak lagi memiliki anak, dan akan ditutup.Sekarang, Anda dapat meminta layar untuk menahan jendela tetap terbuka, setelah perintah berhenti. Gunakan
zombie
perintah layar untuk mengaktifkannya. Urutan Anda terlihat seperti:Untuk memasang kembali secara interaktif:
Dan akhirnya, Anda dapat menulis ulang perintah -X ini sebagai skrip screenrc.
Screenrc:
Naskah:
sumber
Jika Anda ingin efek yang sama
Ctrl-A c
maka Anda harus menggunakanscreen
daripadaexec
:Selain itu, Anda dapat memindahkan perintah di atas ke
$HOME/.screenrc-younameit
file (tanpascreen -S test -X
awalan) dan meluncurkanscreen -c $HOME/.screenrc-younameit
ketika Anda ingin membuat sesi layar tertentu.sumber
menggunakan byobu sebuah opsi?
sumber
Saya melakukan hal yang sama malam ini, saya ingin membuka layar dengan beberapa file yang sudah dibuka. Butuh beberapa saat untuk memikirkan semua ini, tetapi akhirnya saya menemukan yang berikut ini yang tampaknya bekerja dengan sangat baik:
Ini akan membuat enam layar berbeda, dengan layar 1-5 membuka berbagai file. Saya tidak tahu semua hal spesifik tetapi 'barang' pada dasarnya memberitahu layar teks yang dikutip berikut ini bukan perintah layar. The 'eval' kemudian evlautes semua yang terkandung dalam kutipan. Tanpa ini,
screen -p 4 -S CS140 -X stuff "vim cs140-ps2/src/threads/intr-stubs.h\015"
hanya pipa teks yang dikutip tanpa menjalankannya. Eval akan membaca '\ 015' sebagai baris baru dan dengan demikian mengeksekusi teks sebelumnya.Dalam hal detail lainnya,
screen -p 1 -S CS140 -X CMD
beri tahu shell untuk mengirim 'CMD' ke jendela pertama sesi layar bernama 'CS140'.Semoga itu bisa membantu!
sumber