zaten çalışan bir ekran oturumuna komut gönder


11

Opensolaris içinde çalışan bir gnu ekran oturumuna (4.00.03) komut göndermeye çalışıyorum, ancak herhangi bir kombinasyonu ile herhangi bir komut çalıştırmak için alınamıyor screen -X

Tamam, ile bir ekran oturumu başlatıyorum screen -S testve sonra screen -r -X "date"bana yeniden bağlanacağım tarihi göstermeye çalıştım . Ancak ne hata mesajı ne de ekranda çıktı oluştu. O kadar çok kombinasyon denedim ki hatırlayamıyorum bile.

Bunun nasıl yapılacağına dair ipuçları var mı?

Bunu yapmamın sebebi, çünkü bir daemon olarak gelmeyen bir programım var ve bunu bir ekran oturumunda başlatmak istiyorum, böylece daha sonra neler olduğunu görebiliyorum.


1
man sayfalarında bahsettikleri bu "komut", ekran oturumunun kendisinin ayarları gibi bir ekran komutu için yapılmış gibi görünüyor. Ekran oturumunda açılan kabuk için komutlar göndermek yerine. Peki, kimse bir bash betiği ile bunu yapmak için nasıl bir fikir ??

@Axon: Evet, -X kabuk komutlarını değil ekran komutlarını gönderir, ancak ekranın yeni ekran pencerelerini açabilen bir 'ekran' komutu vardır.

Yanıtlar:


18

Aslında oldukça basit. Aşağıdakileri kullanabilirsiniz:

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

echo -ne '\015'tuşuna basarak öykünür Enter.

NOT: bu 'şeyler' bir ekran komutudur. http://www.gnu.org/software/screen/manual/screen.html#Stuff


Lütfen "şeylerin" neyi temsil ettiğini belirtir misiniz? Bu bir isim ... veya komut ... veya diğer parametreler mi?
Cerin

Aslında çalışıyor, ama ben her nasılsa sadece söyleyemem;) Bu tuşa basılan olayları geçmek ve ekrana satırsonu geçmek gibi bir şey. Sadece normal ekran yürütme komutu yok mu?
ducin

@Cecin: stuffbir dizeyi
stdin'e

Bu çok iyi, ama nedense "screen -RdS sessionname -X stuff 'ls -l' echo -ne '\015'" ile çalışmıyor , neden?
e271p314

Bu, komutu iki kez çalıştırmadıkça çalışmaz ... ve ayrı komut satırlarında ... screen -d -m -S sessionname; screen -S sessionname -X [...]hiçbir şey yapmazsam hiçbir şey yapmayacak (screen -d -m -S sessionname&)&sleep 10;screen -S sessionname -X [...]yeni bir ekran oturumu oluşturmak dışında hiçbir şey yapmaz. aşağı oylama
user3338098

5

İstediğiniz gibi geliyor:

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

-S testi: bu oturumu adlandırın
-d -m: başlangıç ​​ekranı ayrıldı
-c / dev / null: ~ / .screenrc yoksay (farklı bir dosya sağlayın veya bu seçeneği bırakın,
  ihyaç olduğu gibi)
-: ekran sonu seçenekleri
sh -c 'tarihi; exec $ SHELL ': ekranın çalışması için komut, bu komutun
  sadece 'tarih' idi, sonra ekran hemen çıkardı. çıkmak istemiyorsan
  komutunuz çıktıktan sonra şunu kullanabilirsiniz:
    $ screen -S test -d -m -c / dev / null - komutunuz burada

Ya da belki sadece dtach istersiniz .


Bunu çalıştırmak hiçbir işe yaramaz. Başarı veya hata mesajı yok, ancak screen -listaçık oturum yok.
Cerin

Bu cevap benim için çalıştı. Anahtar, ekran seçeneklerini sonlandırmak için - idi.
Plazgoth

1
screen -S <session_name> -X screen [-t <title>] <shell_command> [<args>]

(Başlık ile yeni bir pencere açın başlığı varolan oturumu adında cinsinden) session_name ve yürütmek shell_command (isteğe bağlı bağımsız değişkenler ile args )

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.