kirim perintah ke sesi layar yang sudah berjalan

11

Saya telah mencoba mengirim perintah ke sesi layar gnu yang sedang berjalan (4.00.03) di opensolaris, tetapi tidak bisa menjalankan perintah apa pun melalui kombinasi dari screen -X

Ok, saya memulai sesi layar dengan screen -S test, dan kemudian mencoba dengan screen -r -X "date"hanya menunjukkan kepada saya tanggal, ketika saya akan terhubung kembali. Tetapi tidak ada pesan kesalahan atau output di layar yang terjadi. Saya mencoba dengan banyak kombinasi, yang saya bahkan tidak ingat.

Adakah petunjuk tentang bagaimana mencapainya?

Alasan mengapa saya melakukan ini adalah, karena saya memiliki program, yang tidak datang sebagai daemon, dan saya ingin memulainya dalam sesi layar, jadi nanti saya bisa melihat apa yang sedang terjadi.

Der Hochstapler
sumber
1
tampaknya, seolah-olah "perintah" yang mereka bicarakan di halaman manual dimaksudkan untuk perintah layar, seperti pengaturan untuk sesi layar itu sendiri. Daripada mengirim perintah untuk shell, yang dibuka di sesi layar. Jadi, adakah yang tahu bagaimana mewujudkannya dengan skrip bash ??
@ Alex: Ya, -X mengirimkan perintah layar, bukan perintah shell, tetapi layar memiliki perintah 'layar' yang dapat membuka jendela layar baru.

Jawaban:

18

Sebenarnya itu cukup sederhana. Anda dapat menggunakan yang berikut ini:

screen -S sessionname -X stuff 'command'`echo -ne '\015'`

echo -ne '\015'mengemulasi menekan Entertombol.

CATATAN: 'barang' itu adalah perintah layar. http://www.gnu.org/software/screen/manual/screen.html#Stuff

thegatekeeper
sumber
Bisakah Anda jelaskan apa yang dilambangkan "barang"? Apakah itu nama ... atau perintah ... atau parameter lainnya?
Cerin
Ini sebenarnya bekerja, tapi saya tidak akan mengatakan itu;) Ini adalah sesuatu seperti melewatkan acara yang ditekan dan memberikan baris baru ke layar. Apakah tidak ada layar normal yang menjalankan perintah ...?
ducin
@Cecin: stuffadalah perintah layar untuk 'memasukkan' string ke stdin
konrad
Ini sangat bagus, tetapi untuk beberapa alasan tidak bekerja dengan "screen -RdS sessionname -X stuff 'ls -l' echo -ne '\015'", mengapa?
e271p314
ini tidak berfungsi kecuali saya menjalankan perintah dua kali ... dan pada baris perintah yang terpisah ... jika saya screen -d -m -S sessionname; screen -S sessionname -X [...]tidak melakukan apa pun akan bekerja bahkan (screen -d -m -S sessionname&)&sleep 10;screen -S sessionname -X [...]tidak melakukan apa pun kecuali membuat sesi layar baru yang tidak melakukan apa pun. down-voting
user3338098
5

Kedengarannya seperti yang Anda inginkan:

$ screen -S test -d -m -c / dev / null - sh -c 'date; exec $ SHELL '

-S test: beri nama sesi ini
-d -m: layar mulai terlepas
-c / dev / null: abaikan ~ / .screenrc (berikan file lain atau jatuhkan opsi ini,
  sesuai kebutuhan)
-: akhir opsi layar
tanggal sh -c '; exec $ SHELL ': perintah untuk menjalankan layar, perhatikan bahwa jika ini perintah
  hanya 'tanggal' maka layar akan segera keluar. jika Anda tidak ingin keluar
  layar setelah perintah Anda keluar, maka Anda dapat menggunakan:
    $ screen -S uji -d -m -c / dev / null - perintah Anda di sini

Atau mungkin Anda hanya ingin dtach .


sumber
Menjalankan ini tidak menghasilkan apa-apa. Tidak ada pesan sukses atau kesalahan, tetapi screen -listtidak menunjukkan sesi terbuka.
Cerin
Jawaban ini berhasil untuk saya. Kuncinya adalah - untuk mengakhiri opsi layar.
Plazgoth
1
screen -S <session_name> -X screen [-t <title>] <shell_command> [<args>]

Membuka jendela baru (dengan judul judul ) di sesi bernama ada session_name , dan melaksanakan shell_command (dengan argumen opsional args )

Jeremy Kao
sumber