Я пытаюсь выяснить, как написать сценарий, который будет запускать программы в сеансах экрана 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" был проигнорирован. Я также пытался процитировать команду и тоже не помогает.
scripts
gnu-screen
TbMA
источник
источник
-X
вариант?Ответы:
Вы действительно хотели поставить
\
в конце строки? Если нет, попробуйте удалить их - они избегают следующего символа.Кроме того, удаление
-X
настроек помогает мне работать, например:не удается
No screen session found
, однако:работает отлично. Поэтому я подозреваю, что для вас будет работать следующее:
Помните, что если вы запустите это во время загрузки, $ HOME будет отличаться от того, что вы сделали после входа в систему под именем конкретного пользователя. Если вам нужно запустить его от имени определенного пользователя, вам нужно будет использовать его,
su
чтобы запустить его от имени этого пользователя, и указание полного пути устранит любую двусмысленность:Или вы бы назвали весь сценарий выше как
su - username /path/to/your/script
.источник
screen -S test -d -m $HOME/folder/folder/.program
почти делает именно то, что я ищу, за исключением того, что папка / .program завершена, сеанс экрана автоматически закрывается. Есть ли способ сохранить экранную сессию (оболочку) запущенной даже после завершения программы? Возможно, вместо того, чтобы запускать программу исключительно, запустите оболочку, которая запускает программу и затем возвращается к приглашению оболочки, или что-то еще?Как упоминалось в Cry Havok, вы можете разместить программу прямо в командной строке.
Если вы действительно должны использовать опцию -X, то а) вам нужно указать команду 'screen' и б) сеанс должен существовать заранее.
источник
sleep
команды, чтобы дать экранное время, чтобы начать сеанс перед отправкой команды.