GNU ekranlı bir program çalıştırın ve ardından hemen ayırın


27

Sistem önyüklemesinde GNU Screen oturumlarında program (ları) başlatacak bir komut dosyası yazmayı bulmaya çalışıyorum. Bunu deniyorum:

#!/bin/bash
screen -S test -d -m -X $HOME/folder/folder/.program \
screen -S test2 -d -m -X $HOME/folder/folder/.program2 \

ancak oturum zaten ayrılmış olduğundan komut çalıştırılamıyor? İhtiyacım olan tek şey ekran oturumunda komut çalıştırmak ve bu oturumu hemen ayırmak.

Cevaplar için teşekkürler, ama şimdi başka bir sorunla karşılaştım. Benim "program ve program2" için bazı değişkenler koyduktan sonra komut dosyası çalışmıyor. Bunun gibi bir şey:

#!/bin/bash
screen -S test -d -m $HOME/folder/folder/.program -f config.cfg

nedense "-f config.cfg" ihmal edildi. Ayrıca emir vermeye çalıştım ve çok da yardımcı olmuyor.


Neden -Xseçenek?
enzotib 22:11

Yanıtlar:


34

Gerçekten koymak istedin mi \ çizginin sonuna ? Eğer öyleyse, bunları kaldırmayı deneyin - aşağıdaki karakterden kaçarlar.

ayrıca, yardımın düşürülmesi -Xkurulumun benim için çalışmasına yardımcı olur, örneğin:

screen -S test -d -m -X touch /tmp/test

No screen session foundBununla birlikte , başarısız :

screen -S test -d -m touch /tmp/test

iyi çalışıyor. Bu nedenle aşağıdakilerin sizin için işe yarayacağından şüpheleniyorum:

#!/bin/bash
screen -S test -d -m $HOME/folder/folder/.program
screen -S test2 -d -m $HOME/folder/folder/.program2

Unutmayın, bunu önyükleme zamanında çalıştırırsanız, $ HOME, belirli bir kullanıcı olarak giriş yaptıktan sonra aynı değildir. Belirli bir kullanıcı suolarak çalıştırmanız gerekiyorsa, bu kullanıcı olarak çalıştırmanın beğenisini kullanmanız gerekir ve tam yolun belirtilmesi belirsizliği ortadan kaldırır:

#!/bin/bash
screen -S test -d -m su - username /home/username/folder/folder/.program
screen -S test2 -d -m su - username /home/username/folder/folder/.program2

Ya da yukarıdaki betiğin tamamını arayabilirsin su - username /path/to/your/script.


Cevaplar için teşekkürler, ama şimdi başka bir sorunla karşılaştım. Benim "program ve program2" için bazı değişkenler koyduktan sonra komut dosyası çalışmayı durduruyor
TbMa

Bu: Klasör / .programın bitmesi dışında screen -S test -d -m $HOME/folder/folder/.programneredeyse aradığım şeyi yapar , ekran oturumu otomatik olarak kapanır. Program tamamlandıktan sonra bile ekran oturumunu (kabuk) çalışır durumda tutmanın bir yolu var mı? Belki de programı sadece çalıştırmak yerine, programı başlatan ve daha sonra kabuk istemine geri dönen bir kabuk başlatır mısın?
RocketNuts

4

Cry Havok'un dediği gibi, programı doğrudan komut satırına yerleştirebilirsiniz.

-X seçeneğini gerçekten kullanmanız gerekiyorsa, a) 'screen' komutunu belirtmeniz ve b) oturumun önceden var olması gerekir.

screen -dmS test
screen -S test -X screen $HOME/folder/folder/.program
screen -dmS test2
screen -S test2 -X screen $HOME/folder/folder/.program2

Programı komut satırına yerleştirirseniz, program çıktığında ekrandan çıkar; Konsol çıktısını görmek istiyorsanız ekranı açık tutmak için bir komut satırı bayrağı göremiyorum. Ekranı başlatıp komutları ayrı ayrı gönderirseniz, burada gösterildiği gibi sleep, komutu göndermeden önce oturumu başlatmak için ekrana zaman vermek için açık komutlara ihtiyacınız olabilir .
Chinasaur

Bu cevap çok benzer stackoverflow.com cevap bir cevap benzer bir soru . @CryHavok yerine bu cevabı tercih ediyorum çünkü bu cevap programınızı kullanıcının varsayılan kabuğu içinde yürütüyor (@CryHavok programı bir ana kabuk olmadan çalıştırıyor, böylece program öldüğünde veya ekran oturumu derhal sonlandırıldığında)
Trevor Boyd Smith,
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.