Я пытаюсь понять, почему всякий раз, когда я использую function 2>&1 | tee -a $LOG
, tee создает функцию подоболочки в функции, которая не может быть удалена простым exit 1
(и если я не использую tee
, он отлично работает). Ниже приведен пример:В bash как выйти из скрипта из функции, которая передается по типу?
#!/bin/bash
LOG=/root/log.log
function first()
{
echo "Function 1 - I WANT to see this."
exit 1
}
function second()
{
echo "Function 2 - I DON'T WANT to see this."
exit 1
}
first 2>&1 | tee -a $LOG
second 2>&1 | tee -a $LOG
Выход:
[[email protected] ~]# ./1.sh
Function 1 - I WANT to see this.
Function 2 - I DON'T WANT to see this.
Зв если я удалю часть | tee -a $LOG
, она будет работать как ожидалось (сценарий будет выведен в первой функции).
Можете ли вы, пожалуйста, объяснить, как преодолеть это и правильно выйти из функции во время получения выходного сигнала?
"создает функцию подоболочки в функции" Ну, вы уже сказали это. Зачем? Поскольку все простые команды в конвейере, кроме последнего, выполняются в подоболочках (последний зависит от опции или чего-то - я забыл). Зачем? Потому как. Что касается того, как правильно выйти, проверьте статус выхода (если установлен 'pipefail') или' PIPESTATUS' после конвейера. – 4ae1e1
Последующий комментарий выше: вариант, который я забыл, - 'lastpipe'. – 4ae1e1
Связанные: http://stackoverflow.com/q/9277827/951890 –