Экран GNU: команды не могут быть заполнены, если экран не прикреплен?

10

У меня есть следующий скрипт

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

если я сначала не прикреплю экран, кажется, что эффекты ничего не сделают? Почему это так и как я могу изменить этот скрипт, чтобы мне не нужно было прикреплять экран?

dukevin
источник

Ответы:

14

Когда вы запускаете сеанс экрана в отдельном режиме ( screen -d -m), окно не выбирается, поэтому вход, отправленный позже screen -X stuff, просто теряется. Вам нужно явно указать, что вы хотите отправить нажатия клавиш в окно 0 ( -p 0). В любом случае, это хорошая идея, если вы по какой-либо причине создадите другие окна в этом сеансе экрана.

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

( printf \\rстрого эмулировать Returnключ; многие, но не все программы принимают новую строку ( \n).)

Жиль "ТАК - перестань быть злым"
источник
Спасибо! это работает отлично. Извините всех за то, что не по теме
Dukevin
не работает для меня.
Таннер Струнк
2

Это недавно появилось при попытке ответить на вопрос на unix.stackexchange.com .

Суть в том, что на экране нет выбранного по умолчанию окна, пока вы не настроите его, но Жиль показал нам, как вы можете заставить его выбрать , добавив аргумент -p 0к вашей экранной команде.

Лично я рекомендую перейти на tmux. Вот как вы могли бы перенести ваши экранные команды для работы в tmux:

tmux new-session -d -n $1
tmux send-keys -t $1 "$beast\n"
Калеб
источник