Ekran GNU: Nie można wypychać poleceń, chyba że ekran jest podłączony?

10

Mam następujący skrypt

screen -d -m -S $1                #start screen minimized
screen -S $1 -X stuff "$beast     
"                                 #stuff commands

chyba że najpierw podłączę ekran, wydaje się, że wpływ rzeczy nic nie da? Dlaczego tak jest i jak mogę zmodyfikować ten skrypt, aby nie trzeba było dołączać ekranu?

dukevin
źródło

Odpowiedzi:

14

Po uruchomieniu sesji ekranu w trybie odłączonym ( screen -d -m) nie jest wybierane żadne okno, więc dane przesłane później screen -X stuffsą po prostu tracone. Musisz wyraźnie określić, że chcesz wysyłać naciśnięcia klawiszy do okna 0 ( -p 0). To i tak jest dobry pomysł, na wypadek, gdyby z jakiegoś powodu zdarzyło Ci się tworzyć inne okna w tej sesji ekranu.

screen -S "$1" -p 0 -X stuff "$beast$(printf \\r)"

( printf \\raby ściśle emulować Returnklucz; wiele, ale nie wszystkie programy akceptują znak nowej linii ( \n).)

Gilles „SO- przestań być zły”
źródło
Dzięki! działa idealnie. Przepraszamy wszystkich za brak tematu
dukevin
nie działa dla mnie
Tanner Strunk
2

Niedawno pojawiło się to podczas próby odpowiedzi na pytanie na unix.stackexchange.com .

Podsumowując, ekran nie ma domyślnie wybranego okna, chyba że zostaniesz przywiązany, ale Gilles pokazał nam, jak możesz zmusić go do wybrania , dodając argument -p 0do polecenia screen.

Osobiście polecam przejście na tmux. Oto jak możesz przenieść swoje polecenia ekranowe do pracy w tmux:

tmux new-session -d -n $1
tmux send-keys -t $1 "$beast\n"
Caleb
źródło