Próbuję wymyślić, jak napisać skrypt, który uruchamiałby program (y) w sesjach ekranowych GNU podczas uruchamiania systemu. Próbuję tego:
#!/bin/bash
screen -S test -d -m -X $HOME/folder/folder/.program \
screen -S test2 -d -m -X $HOME/folder/folder/.program2 \
ale polecenie nie może zostać wykonane, ponieważ sesja jest już odłączona? Jedyne, czego potrzebuję, to uruchomić polecenie w sesji ekranowej i natychmiast odłączyć tę sesję.
Dzięki za odpowiedzi, ale teraz napotkałem inny problem. Skrypt przestaje działać po wstawieniu zmiennych do mojego „programu i programu2”. Coś takiego:
#!/bin/bash
screen -S test -d -m $HOME/folder/folder/.program -f config.cfg
z jakiegoś powodu „-f config.cfg” zostało zignorowane. Próbuję również zacytować polecenie i też nie pomaga.
scripts
gnu-screen
TbMa
źródło
źródło
-X
opcja?Odpowiedzi:
Czy naprawdę chciałeś umieścić
\
na końcu linii? Jeśli nie, spróbuj je usunąć - uciekają przed następującą postacią.upuszczenie pomocy
-X
pomaga mi w instalacji, na przykład:nie udaje się
No screen session found
jednak z:działa w porządku. Podejrzewam, że następujące działania będą dla ciebie działać:
Pamiętaj, że jeśli uruchomisz to podczas rozruchu, $ HOME nie będzie taki sam jak po zalogowaniu się jako konkretny użytkownik. Jeśli musisz uruchomić go jako określony użytkownik, musisz użyć takich jak,
su
aby uruchomić go jako ten użytkownik, a określenie pełnej ścieżki usunie wszelkie niejasności:Lub nazwałbyś cały skrypt powyżej jako
su - username /path/to/your/script
.źródło
screen -S test -d -m $HOME/folder/folder/.program
prawie robi dokładnie to, czego szukam, chyba że folder / .program jest zakończony, sesja ekranowa jest automatycznie zamykana. Czy jest jakiś sposób na utrzymanie sesji ekranowej (powłoki) nawet po zakończeniu programu? Może zamiast uruchamiać program wyłącznie, uruchom powłokę, która uruchamia program, a następnie powraca do znaku zachęty powłoki, czy coś takiego?Jak wspomniano Cry Havok, możesz umieścić program bezpośrednio w wierszu poleceń.
Jeśli naprawdę musisz użyć opcji -X, a) musisz określić polecenie „screen” ib) sesja musi istnieć wcześniej.
źródło
sleep
poleceń, aby dać ekranowi czas na rozpoczęcie sesji przed wysłaniem polecenia.