Прикрепите, отсоедините и убейте процесс на экране с помощью bash-скрипта
Я знаю, что вы можете запустить программу на отдельном экране, но я бы зашел на существующий экран, убил бы запущенный в данный момент процесс, перезапустил его, а затем отключил.
Возможно ли это сделать с помощью bash-скрипта, как я могу отправить, например, Ctrl-A, Ctrl-D и Ctrl-C?
2 ответа
Если вы хотите удалить экран, вы также можете удалить имя экрана в /var/run/screens/{user/
и сделать screen -wipe
,
Но на экране есть вещи и paste
команда:
Команда: вставить [регистры [пункт назначения]]
(C-a ], C-a C-])
Записать (объединенное) содержимое указанных регистров в поток stdin текущего окна. Регистр "." рассматривается как буфер для вставки. Если параметр не указан, пользователю предлагается ввести один регистр. Буфер вставки может быть заполнен командами copy, history и readbuf. Другие регистры могут быть заполнены командами register, readreg и paste. Если вставка вызывается со вторым аргументом, содержимое указанных регистров вставляется в именованный регистр назначения, а не в окно. Если '.' используется в качестве второго аргумента, буфер вставки дисплея является местом назначения. Обратите внимание, что для вставки используются самые разные ресурсы: обычно требуется как текущее окно, так и текущий дисплей. Но всякий раз, когда указан второй аргумент, текущее окно не требуется. Когда спецификация источника содержит только регистры (не буфер вставки), тогда не требуется текущего отображения (терминал подключен), так как регистры являются глобальным ресурсом. Буфер вставки существует один раз для каждого пользователя.
Команда: stuff {string}
Наполните строку в буфере ввода текущего окна. Это похоже на команду вставки, но с гораздо меньшими накладными расходами. Вы не можете вставлять большие буферы с помощью команды stuff. Это наиболее полезно для привязки клавиш. Смотри Bindkey.
Так что это работает:
screen -S session_name -X at window_number stuff ^C
screen -S session_name -X at window_number stuff ^X
и отправляет control-c и control-x соответственно, и вы можете использовать его также для объединения кодов клавиш (например, control a, d)
Если вы хотите имитировать нажатия клавиш, используйте отличный сценарий "ожидайте".
Пример сценария ожидания может быть примерно таким:
spawn $env(SHELL)
match_max 100000
send -- "screen\n"
expect eol
send -- "ls\n"
send -- "^Ad"
expect eof
Это будет выполнено с:
expect ./myscript