Отправка ctrl-c на конкретный сеанс экрана

Я разрабатываю сценарий для запуска процесса внутри сеанса именованного экрана.

as_user "screen -p 0 -S **$command** -X eval 'stuff \"wine LFS.exe /cfg=**$command**.cfg\"\015'"

Итак, bash myscript.sh start test создаст экран с именем test и запустит test.cfg с программным обеспечением.

Теперь я хочу, чтобы мой скрипт получил доступ к определенному сеансу экрана и сделал CTRL+C, чтобы остановить запущенный процесс, чтобы я мог завершить сеанс экрана.

Что-то вроде этого:

as_user "screen -p 0 -S **$command** **... kill the process with ctrl-c...**"
as_user "screen -p 0 -S **$command** -X eval 'stuff \"exit\"\015'"

person user2280032    schedule 14.04.2013    source источник


Ответы (1)


Я не совсем вас понимаю, но чтобы отправить ctrl-c в окно в сеансе экрана:

screen -S session_name -X at window_number stuff $'\003'
# or
screen -S session_name -X -p window_number stuff $'\003'

Если вы хотите отправить что-то всем окнам, используйте # (необходимо заключить в кавычки) вместо window_number.

ОБНОВЛЕНИЕ:

Команда экрана stuff также поддерживает ^X (или ^x) для обозначения CTRL-X, поэтому следующую команду также можно использовать для отправки CTRL-C.

screen -S session_name -X at window_number stuff ^C
person pynexj    schedule 15.04.2013
comment
Не удалось заставить работать at, но у меня это сработало только для активного окна, что может быть кому-то полезно: screen -S session_name -X stuff $'\003' - person Billy Moon; 22.07.2015
comment
screen -S session_name -X at "#" stuff $'\003' с screen -S session_name -X quit мне идеально подходит. Теперь я могу убить любую сессию экрана. Спасибо. - person puchu; 29.05.2016
comment
Круто, это было именно то, что я искал! У вас есть дополнительная информация о кодировке $'\003'? Могу ли я предположить, что Ctrl+A будет 001, Ctrl+B будет 002 и т. д.? Кроме того, есть ли способ отправить курсор вверх, вниз, влево и вправо? - person RocketNuts; 26.01.2021
comment
для символов ctrl см. en.wikipedia.org/wiki/ - person pynexj; 26.01.2021
comment
О, и теперь, когда мне интересно, поскольку вы упомянули, экран также поддерживает ^C. Как ввести буквальный символ ^? - person RocketNuts; 26.01.2021
comment
вы имеете в виду буквальный символ control? нет, здесь нет символа control. это ключ, но такого символа нет. - person pynexj; 26.01.2021
comment
в ответе для ^C ^ - это символ вставки. это не управляющий символ. - person pynexj; 26.01.2021
comment
чтобы отправить курсор вверх/вниз/влево/вправо, вы можете сначала получить управляющую последовательность с помощью tput. например чтобы получить курсор вверх, вы можете tput cuu1. подробности можно найти в terminfo(5). - person pynexj; 26.01.2021