Когда команда tee перенаправляет на subshell, последние две строки отсутствуют

Ниже приведено решение для записи команды и ее вывода, выполненного на удаленной машине:

rexec:// -t -t /usr/bin/ssh -q -x -o StrictHostKeyChecking=no -2 \
         -l ${SSHUserName} -p 22 ${mainHost} \
 | tee >(/opt/oss/clilogging/bin/clilogging.sh para1 para2)

clilogging.sh запишет каждую команду и ее вывод в файл журнала.
Однако иногда последняя вышедшая команда и ее выходное сообщение "logout" не записываются в файл журнала.

clilogging.sh как следует:

#!/bin/bash

{
    while read R || [ -n "$R" ];do
        #e.g. 2013-08-19T09:58:08+0300
        timestamp=`date +%FT%T%z`;
        echo $timestamp $R;
    done
} > /tmp/xxx.log

Кто-нибудь может мне помочь? Большое спасибо!

1 ответ

Решение

Спасибо Тому за комментарий и спасибо всем.
Я нашел решение этой проблемы.

Нужно добавить следующий код в начале clilogging.sh

trap "" HUP

Смысл кода заключается в обработке сигнала SIGHUP, здесь я игнорирую этот сигнал, а затем clilogging.sh
не завершит работу немедленно и сможет обработать весь буфер.

человек 7 сигнал

   Signal     Value     Action   Comment
   -------------------------------------------------------------------------
   SIGHUP        1       Term    Hangup detected on controlling terminal
                                 or death of controlling process
Другие вопросы по тегам