Я пытаюсь выяснить, как написать сценарий, который запускал бы программы в сеансах экрана 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
помогает мне выполнить настройку, например:
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
.
Как упоминалось 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