Я искал способ отправить команду на отдельный сеанс экрана. Все идет нормально. Вот что я придумал:
$ screen -S test -p 0 -X stuff 'command\n'
Эта команда работает как надо. Но мне бы тоже хотелось, чтобы выходные данные были отражены прямо перед моими глазами (нет необходимости в .log
файле или чем-то еще, я просто хочу получить выходные данные).
Использование screen -L
команды, это не вариант.
linux
ubuntu
gnu-screen
Робин
источник
источник
screen
? Разве не для этого созданы дочерние процессы?Ответы:
Используйте трубу первый в первом:
Используйте оператор перенаправления. Перенаправить вывод команды в / tmp / test, например, так:
Тогда в другой оболочке
Обратите внимание, что вы также можете перенаправить сообщения об ошибках, используя оператор 2> & 1 .
пример
Как и было запрошено в комментариях, давайте предположим, что у нас есть php-скрипт, принимающий вводимые пользователем данные и печатающий нагрузку на сервер при вводе «status»:
Вы создаете две пятерки:
Вы вызываете экран:
В другой консоли, назовем это console 2, вы узнаете название вашего экрана:
В консоли 2 вы отправляете команду на экран:
Вы видите команду, появляющуюся на экране. Теперь в консоли 2 вы можете отправлять команды вашему процессу php:
и читать из него:
источник
У меня есть скрипт на python, который отслеживает многочисленные сеансы отдельного экрана и фиксирует выходные данные каждого из них (когда команды использования, такие как free, top -bn2, iostat , периодически отправляются через «stuff»).
Вместо перенаправления в файл и, таким образом, управления, по крайней мере, одним файлом за сеанс отдельного экрана ... Я просто перенаправляю на любой tty / pts, который использует мой родительский сеанс.
Шаг № 1: Начните новый сеанс экрана (с понятным для человека именем) в отдельном режиме.
Шаг № 2: Отправьте ваши команды (я буду использовать команду 'free -g' вместе с 'uname -r') через материал. Важно указать окно, которое вы хотите использовать (в нашем случае, первое и единственное окно) с -p.
Шаг № 3: Приведенный выше шаг только отправляет текст команды. Нам также необходимо отправить возврат каретки в этот отдельный сеанс экрана, чтобы оболочка выполнила нашу команду. Символ ASCII 015 - это возврат каретки в большинстве систем * nix.
Шаг № 4: Перенаправить вывод нашего отдельного сеанса экрана на наши текущие tty / pts:
Результат шага # 4 будет выглядеть примерно так:
Хотя это кажется немного сложным, этот процесс легко сценариев. С помощью Python я могу анализировать выходные данные шага # 4 и собирать только те данные, которые мне нужны.
Выбрав простой сценарий, такой как получение сведений об IP-адресе, я написал пример сценария для демонстрации представленных выше концепций. Не стесняйтесь заменить и повозиться, как считаете нужным.
Пример скрипта Python для получения IP-данных из отдельного сеанса экрана:
Над сценарием в действии:
источник
screen -X logfile /tmp/something
;screen -X log on
;screen -X stuff "command param"
;screen -X log off
работать еще лучше в этом сценарии.Пример:
источник