Передача журналов вывода из программы в функцию и одновременное сохранение кода возврата в переменной - PullRequest
2 голосов
/ 03 июля 2019

У меня есть сценарий оболочки, который имеет функцию для записи операторов. SomeProgram - это другая программа, которая запускается из моего сценария оболочки, и журналы из нее передаются в функцию LogToFile.

#!/bin/sh

LogToFile() {
    [[ ! -t 0 ]] && while read line; do echo "$line" >> $MY_LOG_FILE; done
    for arg; do echo "$arg" >> $MY_LOG_FILE; done
}

SomeProgram | LogToFile

Вопрос:
Все хорошо, пока здесь. Но я пытался получить код возврата из SomeProgram и сохранить его в переменной. Как я могу сделать это, не теряя функциональность журналов с SomeProgram, идущих в мою функцию LogToFile. Я попробовал следующие варианты, но тщетно.

RETVAL=SomeProgram | LogToFile
RETVAL=(SomeProgram) | LogToFile
RETVAL=(SomeProgram | LogToFile)

Можно ли передать выходные данные программы в параметр функции и одновременно получить возвращаемое значение в другой переменной?

1 Ответ

2 голосов
/ 03 июля 2019

Я понял это в конце концов. PIPESTATUS - инструмент для использования здесь.

Ниже приведен способ, которым я могу использовать его для получения кода возврата SomeProgram в RETVAL, например.

SomeProgram | LogToFile
RETVAL=${PIPESTATUS[0]}

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

PIPESTATUS[1] может дать вывод LogToFile, например, если LogToFile была программой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...