Создание буфера STD IN / OUT для программы, выполняющейся в сеансе экрана

297
varlogtim

Среда

Linux version 2.6 Screen version 4.03.01 

Я запускаю приложение внутри сеанса экрана. Программа печатает в STDOUT и читает из STDIN.

Что я хотел бы сделать:

Во-первых, есть STDOUT из screen tee'd в файл. По какой-то причине, пайпинг для тройника записывает только первые несколько строк, затем останавливается. Это может быть из-за того, что выполняемый мной сценарий оболочки запускает другие приложения / сценарии оболочки ... Есть ли способ подключения к STDOUT сеанса экрана?

Во-вторых, я хотел бы создать файл, как, возможно, fifo ?, который я могу записать и сделать так, чтобы он отправлял эти данные в STDIN сеанса экрана.

Я открыт для других предложений, например, не используя screenвообще и делать что - то с nohupи некоторые fifo«s

По сути, я хочу создать фоновое приложение и иметь файл, который я могу привязать к выходу, а другой - для перенаправления ввода.

0

1 ответ на вопрос

0
John1024

Basically, I want to background an application and have a file that I can tail for the output and another to redirect input to.

If that is the case, then (1) we need to background application and send its output to file file:

application >file & 

And, (2) we need to tail application's output to command another:

tail -f | another 

Example

Let's create a sample application and another:

$ application() { while sleep 1; do date; done; } $ another() { grep 2017; } 

Now, let's start application in the background:

$ application >file & [1] 5989 

And, let's run another in the foreground:

$ tail -f file | another Sat May 20 18:32:05 PDT 2017 Sat May 20 18:32:06 PDT 2017 Sat May 20 18:32:07 PDT 2017 Sat May 20 18:32:08 PDT 2017 Sat May 20 18:32:09 PDT 2017 Sat May 20 18:32:10 PDT 2017 [...clip...] 

Inside a screen session using a FIFO

First, start a screen session. Then run:

$ mkfifo fifo $ application >fifo & [1] 8129 $ cat fifo | another Sat May 20 18:50:39 PDT 2017 Sat May 20 18:50:40 PDT 2017 Sat May 20 18:50:41 PDT 2017 Sat May 20 18:50:42 PDT 2017 Sat May 20 18:50:43 PDT 2017 Sat May 20 18:50:44 PDT 2017 Sat May 20 18:50:45 PDT 2017 Sat May 20 18:50:46 PDT 2017 [...snip...] 

(I used cat fifo | another for its parallism to the first tail -f version. cat is unnecessary here. We could have used another <fifo.)

Прочитайте мой пост. ;) varlogtim 6 лет назад 1
@varlogtim Прочитайте мой ответ. Я процитировал краткое предложение из вашего поста и сделал то, что попросил цитата. Если вы хотите что-то еще, пожалуйста, будьте ясны и точны. John1024 6 лет назад 0
Чтение стандартного вывода и запись в стандартный сеанс экрана, желательно с файлами fifo. varlogtim 6 лет назад 0
По какой-то причине, как уже говорилось, передача программы в выходные данные содержит только первые несколько строк, а затем останавливается. varlogtim 6 лет назад 0
Ваш `application` сбрасывает свой вывод? Erik Bennett 6 лет назад 1
@varlogtim (A) Вышеизложенное можно сделать внутри сеанса экрана так же, как и снаружи. Я добавил пример в сеанс экрана и использовал fifo вместо файла. (B) Я не могу воспроизвести проблему с остановкой вывода. Это продолжается для меня. Вы используете мое `application` и` another` или что-то другое? John1024 6 лет назад 0
Я, вероятно, могу понять это, а затем обновить с ответом. varlogtim 6 лет назад 0

Похожие вопросы