shell: перенаправить поток вывода в функцию, сохраняя доступ к переменным - PullRequest
0 голосов
/ 20 сентября 2018

Я бы хотел перенаправить поток вывода команды в функцию, поэтому я сделал это:

function aClassicCommand {

    sleep 1
    echo "this is logs"
}

##############################

function logsReceiver {

    read IN
    echo "received logs: $IN"
}

aClassicCommand | logsReceiver &

# doing stuff in parallel

wait

Проблема в том, что logsReceiver больше не имеет доступа к внешним переменным:

function aClassicCommand {

    sleep 1
    echo "this is logs"
}

##############################

var=0

function logsReceiver {

    read IN
    echo "received logs: $IN"

    # prints "in subshell var=0" and not "in subshell var=1"
    echo "in subshell var=$var"
}

aClassicCommand | logsReceiver &

var=1
echo "var=$var"

wait

Вывод:

var = 1
полученные журналы: это журналы
в подоболочке var = 0

, ноЯ хочу это:

var = 1
полученные журналы: это журналы
в subshell var = 1

Как я могу решить это?
Спасибо.

1 Ответ

0 голосов
/ 20 сентября 2018

Вы должны экспортировать переменную:

export var=1
aClassicCommand | logsReceiver &

Установить переменную среды.Отметьте каждое имя для передачи дочерним процессам в среде.

Если необходимо передать данные в уже запущенную подоболочку, это довольно сложная проблема и своего рода межпроцессное взаимодействие будет необходимо.См. Например этот вопрос для деталей.

...