Я хочу на nix запустить обычное терминальное приложение как батч процесс, но для его корректной работы требуется терминал куда будет идти вывод. Попытки перенаправить вывод в файл жестоко пресекаются самим приложением, которое чувствует, что STDOUT указывает не на экран. Как обмануть глупую программу и отправить ее экранный вывод куда-нибудь, что она не смогла бы отличить от экрана?
Для винды я полагаю, это выглядело бы следующим образом: cmd.exe /c <глуппая программа>, и такую команду можно легко засунуть в сервис для работы в батче, а как быть с nix?
Здравствуйте, bulklodd, Вы писали:
B>Я хочу на nix запустить обычное терминальное приложение как батч процесс, но для его корректной работы требуется терминал куда будет идти вывод.
А что за приложение такое привиредливое? Может у него ключик есть, типа "force interactive"?
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
Здравствуйте, ДимДимыч, Вы писали:
ДД>А что за приложение такое привиредливое? Может у него ключик есть, типа "force interactive"?
Приложение — обычный интерпретатор, у него есть ключ для работы в батче, но при его использовании кое-что важное для меня становится недоступным, поэтому есть сильное желание его обмануть, только весь вопрос как?
B>Для винды я полагаю, это выглядело бы следующим образом: cmd.exe /c <глуппая программа>, и такую команду можно легко засунуть в сервис для работы в батче, а как быть с nix?
По аналогии как тут написано можно использовать xterm -c <глупая программа>. Поскольку cmd.exe это тоже в некотором роде эмулатор терминала в винде.
Но тогда где тут batch...
DOO>По аналогии как тут написано можно использовать xterm -c <глупая программа>. Поскольку cmd.exe это тоже в некотором роде эмулатор терминала в винде. DOO>Но тогда где тут batch...
Спасибо за ответ,
посмотрел man по xterm, вроде как xterm, то что надо, но запустить через него прогу мне пока не удалось, она не отрабатывает, т.е. после запуска возврат в командную строку нужно делать через ^C, при этом программа должна создавать файл, а он не создается...
DOO>Как вообще запускается прога?
Здравствуйте, bulklodd, Вы писали:
DOO>>По аналогии как тут написано можно использовать xterm -c <глупая программа>. Поскольку cmd.exe это тоже в некотором роде эмулатор терминала в винде. DOO>>Но тогда где тут batch...
B>Спасибо за ответ,
B>посмотрел man по xterm, вроде как xterm, то что надо...
Сомневаюсь. xterm я привел чисто как пример. Для его работы должны быть запущены X'ы. И запускать его можно только когда определна переменная DISPLAY.
B>Не очень понял, просто имя + опции:
B>$DLC/bin/pro -p sbox.p
Почему ж тогда не устраивает имеющаяся консоль?
Здравствуйте, bulklodd, Вы писали:
B>Я хочу на nix запустить обычное терминальное приложение как батч процесс, но для его корректной работы требуется терминал куда будет идти вывод. Попытки перенаправить вывод в файл жестоко пресекаются самим приложением, которое чувствует, что STDOUT указывает не на экран. Как обмануть глупую программу и отправить ее экранный вывод куда-нибудь, что она не смогла бы отличить от экрана?
B>Для винды я полагаю, это выглядело бы следующим образом: cmd.exe /c <глуппая программа>, и такую команду можно легко засунуть в сервис для работы в батче, а как быть с nix?
Всем откликнувшимся большое спасибо, проблема имеет изящное решение с использованием команды expect, которая делает именно то что надо. Еще раз спасибо.
B>Потому что программа должна запускаться из другой программы (в виндах это называется сервис), с которой не связано реального терминала
Короче программу запускает cron (или какой другой демон)...
Тогда есть несколько решений, сводящихся к одному — псевдотерминал (pty).
Простое решение — запустить сервер telnetd и заставить эту прогу запусткаться при помощи телнетовского клиента (можно так все настроить, что этот telnet сервер будет принимать подключения только от локального компутера и по безопасности все будет не так плохо).
Решение по-сложнее — найти какой-нибудь pty-wrapper (я что-то на вскидку не смог). И использовать его.