Jalankan program dengan layar GNU dan segera lepas setelahnya

27

Saya mencoba mencari cara untuk menulis skrip yang akan memulai program dalam sesi Layar GNU saat boot sistem. Saya mencoba ini:

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

tetapi perintah tidak dapat dieksekusi karena sesi sudah terlepas? Satu-satunya hal yang saya butuhkan adalah menjalankan perintah di sesi layar dan lepaskan sesi ini segera.

Terima kasih atas jawabannya, tetapi sekarang saya menghadapi masalah lain. Script berhenti berfungsi setelah saya menaruh beberapa variabel untuk "program dan program2" saya. Sesuatu seperti ini:

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

untuk beberapa alasan "-f config.cfg" diabaikan. Saya juga mencoba mengutip perintah dan tidak membantu juga.

TbMa
sumber
Mengapa ada -Xpilihan?
enzotib

Jawaban:

34

Apakah Anda benar-benar bermaksud meletakkannya \di akhir baris? Jika tidak maka coba hapus itu - mereka lolos dari karakter berikut.

juga, menjatuhkan bantuan -Xmembantu pengaturan, misalnya:

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

gagal dengan No screen session found, namun:

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

bekerja dengan baik. Karena itu saya curiga hal berikut akan bekerja untuk Anda:

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

Ingat, bahwa jika Anda menjalankan ini saat boot, $ HOME tidak sama dengan setelah Anda masuk sebagai pengguna tertentu. Jika Anda perlu menjalankannya sebagai pengguna tertentu, Anda harus menggunakan suka suuntuk menjalankannya sebagai pengguna itu, dan menentukan path lengkap akan menghapus ambiguitas:

#!/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

Atau, Anda dapat memanggil seluruh skrip di atas sebagai su - username /path/to/your/script.

Cry Havok
sumber
Terima kasih atas jawabannya, tetapi sekarang saya menghadapi masalah lain. Script berhenti berfungsi setelah saya menaruh beberapa variabel untuk "program dan program2" saya
TbMa
Ini: screen -S test -d -m $HOME/folder/folder/.programhampir melakukan persis apa yang saya cari kecuali jika folder / .program selesai, sesi layar ditutup secara otomatis. Apakah ada cara untuk menjaga sesi layar (shell) tetap berjalan bahkan setelah program selesai? Mungkin alih-alih menjalankan program secara eksklusif, mulai sebuah shell yang memulai program dan kemudian kembali ke prompt shell, atau sesuatu?
RocketNuts
4

Seperti yang disebutkan Cry Havok, Anda dapat menempatkan program tepat di baris perintah.

Jika Anda benar-benar harus menggunakan opsi -X, maka a) Anda perlu menentukan perintah 'layar' dan b) sesi harus ada sebelumnya.

screen -dmS test
screen -S test -X screen $HOME/folder/folder/.program
screen -dmS test2
screen -S test2 -X screen $HOME/folder/folder/.program2
Arcege
sumber
Jika Anda meletakkan program di baris perintah, layar keluar saat program keluar; Saya tidak melihat bendera baris perintah untuk menjaga layar terbuka jika Anda ingin melihat output konsol. Jika Anda memulai layar dan mengirim perintah secara terpisah, seperti yang ditunjukkan di sini, Anda mungkin perlu sleepperintah eksplisit untuk memberi waktu pada layar untuk memulai sesi sebelum mengirim perintah.
Chinasaur
Jawaban ini sangat mirip dengan jawaban stackoverflow.com yang menjawab pertanyaan serupa . Saya lebih suka jawaban ini lebih dari @CryHavok karena jawaban ini mengeksekusi program Anda di dalam shell default pengguna Anda (@CryHavok menjalankan program Anda tanpa shell induk sehingga ketika program mati atau Anda ctrl-c, sesi layar dihentikan segera)
Trevor Boyd Smith