Pertanyaan Jalankan program dengan layar GNU dan segera lepaskan setelahnya


Saya mencoba mencari cara untuk menulis skrip yang akan memulai program dalam sesi GNU Screen (s) di 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 terpisah? Satu-satunya hal yang saya perlukan adalah menjalankan perintah dalam sesi layar dan lepaskan sesi ini segera.

Terima kasih atas jawabannya, tetapi sekarang saya menghadapi masalah lain. Skrip berhenti berfungsi setelah saya memasukkan 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.


24
2017-09-22 15:27


asal


Mengapa -X pilihan? - enzotib
stackoverflow.com/questions/6534386 - Trevor Boyd Smith


Jawaban:


Apakah Anda benar-benar bermaksud untuk menempatkan \ di akhir baris? Jika tidak maka coba hapus mereka - mereka melarikan diri dari karakter berikut.

juga, menjatuhkan -X membantu pekerjaan pengaturan untuk saya, 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 kira hal berikut akan berhasil 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 pada saat boot, $ HOME tidak sama seperti setelah Anda masuk sebagai pengguna tertentu. Jika Anda perlu menjalankannya sebagai pengguna tertentu, Anda harus menggunakan yang suka su untuk menjalankannya sebagai pengguna itu, dan menentukan jalur lengkap akan menghapus ambiguitas apa pun:

#!/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 akan memanggil seluruh skrip di atas sebagai su - username /path/to/your/script.


33
2017-09-22 16:51



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


Seperti yang disebutkan Cry Havok, Anda dapat menempatkan program tepat pada 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

4
2017-09-22 16:56



Jika Anda meletakkan program pada command-line, layar akan keluar ketika program itu keluar; Saya tidak melihat bendera baris perintah untuk menjaga layar tetap terbuka jika Anda ingin melihat keluaran konsol. Jika Anda memulai layar dan mengirim perintah secara terpisah, seperti yang ditunjukkan di sini, Anda mungkin perlu secara eksplisit sleep perintah untuk memberikan waktu layar untuk memulai sesi sebelum mengirim perintah. - Chinasaur
Jawaban ini sangat mirip dengan jawaban stackoverflow.com yang menjawab a pertanyaan serupa. Saya lebih memilih jawaban ini daripada @CryHavok karena jawaban ini mengeksekusi program Anda di dalam shell default pengguna Anda (@CryHavok menjalankan program Anda tanpa shell orangtua sehingga ketika program mati atau Anda ctrl-c itu sesi layar diakhiri segera) - Trevor Boyd Smith