Запустіть програму з екрана GNU та негайно від'єднайтесь після


27

Я намагаюся розібратися, як написати сценарій, який би запускав програми (програми) на сесіях екрану GNU під час завантаження системи. Я намагаюся це:

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

але команда не може бути виконана, тому що сеанс вже відключений? Єдине, що мені потрібно - це запустити команду на екранній сесії та негайно відключити цей сеанс.

Дякую за відповіді, але зараз я зіткнувся з іншою проблемою. Сценарій припиняє роботу після того, як я помістив деякі змінні для моєї програми та програми2. Щось на зразок цього:

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

чомусь "-f config.cfg" проігнорували. Я також намагаюся процитувати команду і не допомагає теж.


Чому -Xваріант?
enzotib

Відповіді:


34

Ви справді мали намір поставити \кінець рядка? Якщо ні, то спробуйте їх видалити - вони уникають наступного символу.

також, скасування довідки -Xдопомагає мені налаштувати роботу, наприклад:

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

No screen session foundоднак не вдається :

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

працює чудово. Як такий, я підозрюю, що для вас буде працювати наступне:

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

Пам'ятайте, що якщо ви запускаєте це під час завантаження, $ HOME не є таким, як після входу в систему як конкретний користувач. Якщо вам потрібно запустити його як певний користувач, вам потрібно буде використовувати вподобання, suщоб запустити його як цього користувача, а вказавши повний шлях, вилучите будь-яку неоднозначність:

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

Або ви б назвали весь сценарій вище як su - username /path/to/your/script.


Дякую за відповіді, але зараз я зіткнувся з іншою проблемою. Сценарій перестає працювати після того, як я помістив деякі змінні для моєї програми та програми2
TbMa

Це: screen -S test -d -m $HOME/folder/folder/.programмайже робить саме те, що я шукаю, за винятком випадків, коли папка / .програма закінчена, сеанс екрана автоматично закривається. Чи є спосіб зберегти сеанс (оболонку) екрана навіть після виконання програми? Можливо, замість ексклюзивного запуску програми, запустити оболонку, яка запускає програму, а потім повертається до підказки оболонки чи щось?
RocketNuts

4

Як згадував Cry Havok, ви можете розмістити програму прямо в командному рядку.

Якщо ви дійсно повинні використовувати опцію -X, то а) вам потрібно вказати команду 'screen' і б) сеанс повинен існувати заздалегідь.

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

Якщо ви розмістите програму в командному рядку, екран закриється, коли програма закінчується; Я не бачу прапор командного рядка, щоб тримати екран відкритим, якщо ви хочете бачити вихід консолі. Якщо ви запускаєте екран і надсилаєте команди окремо, як показано тут, можливо, вам знадобляться явні sleepкоманди, щоб дати екрану час для початку сеансу перед відправленням команди.
Chinasaur

Ця відповідь дуже схожа на відповідь stackoverflow.com, яка відповідає на подібне запитання . Я віддаю перевагу цій відповіді більше ніж @CryHavok, тому що ця відповідь виконує вашу програму всередині оболонки за замовчуванням вашого користувача (@CryHavok запускає вашу програму без батьківської оболонки, тому коли програма загине або ви ctrl-c її сеанс екрана негайно припиняється)
Тревор Бойд Сміт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.