Выведите stdin и stdout процесса

M-xdiff-buffer-with-file

Я только что нашел его путем просмотра files.el где я чувствовал, что существует такая команда:

Просмотрите различия между БУФЕРОМ и его связанным файлом.

5
15.02.2014, 17:23
2 ответа

Самый простой подход должен был бы использовать tee вывести вход к и произвести от ребенка в два отдельных файла как так:

#!/bin/bash
tee in.log | child | tee out.log

Вы могли использовать tee -a параметр (добавляет) для записи обоих журналов в тот же файл, но я не совсем уверен, будут ли они чередованы в правильном порядке или просто записаны один за другим:

#!/bin/bash
tee -a both.log | child | tee -a both.log
6
27.01.2020, 20:37
  • 1
    Большой код! Я впечатлен. Это почти, в чем я нуждаюсь. На некоторой причине дочерний процесс сразу выходит в этой ситуации. Я предполагаю поэтому, что родитель пишет в stdout удара, но не stdout мишени. Я не знаю, как проверить это. –  Anthony Ananich 15.02.2014, 21:33
  • 2
    Это не должно изменять поведение дочернего процесса вообще... Родительский процесс передает какие-либо аргументы ребенку? Если так, Вы добавляли их к дочернему вызову в сценарии? Другая причина, которую я могу вообразить, состоит в том, что мишень могла бы буферизовать stdin/stdout, пока это не получает символ новой строки, таким образом, смещаясь некоторый тайм-аут в дочернем процессе (хотя это кажется маловероятным, так как Вы говорите, что ребенок завершает сразу). –  n.st 15.02.2014, 22:33
  • 3
    Извините, это была моя ошибка. Этот сценарий работает как очарование. –  Anthony Ananich 17.02.2014, 10:44

Если Вы используете именованные каналы, то не имеет значения, если у Вас есть дочерние и родительские процессы:

p1:

#!/bin/sh
# p1

rm -f p1.fifo;mkfifo p1.fifo
trap "exit 1"  0 1 2 3 13 15

while read line; do
    echo p1 got "$line"
    echo p1 sending $line to p2
    echo $line > p2.fifo
    sleep 1
done < p1.fifo

p2:

#!/bin/sh
# p2

rm -f p2.fifo;mkfifo p2.fifo
trap "exit 1"  0 1 2 3 13 15

while read line; do
    echo p2 got "$line"
    echo p2 sending $line to p1
    echo $line > p1.fifo
    sleep 1
done < p2.fifo

сообщение inital:

echo message > p1.fifo

вывод p1:

p1 got message
p1 sending message to p2
p1 got message
p1 sending message to p2

вывод p2:

p2 got message
p2 sending message to p1
p2 got message
p2 sending message to p1
p2 got message
2
27.01.2020, 20:37

Теги

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