Есть ли способ получить стандартный вывод и стандартную ошибку из функций внутри сценария bash? Вот то, что «я думал» я пытался достичь своим сценарием:
#!/bin/bash
LOGS="tmp/sync.log"
function1()
{
echo " "
echo "beginning function 1"
echo " "
for-loop-that-will-run-a-command
}
function2()
{
echo " "
echo "beginning function 2"
echo " "
for-loop-that-will-run-a-command
}
function1 2>&1 "$LOGS" &&
function2 2>&1 "$LOGS" ||
cat "$LOGS" | mailx -s "Here are the logs" myemail@domain.com
Но я ничего не получаю, какой самый эффективный и элегантный способ добиться этого?
Вы ничего не перенаправляете на $LOGS
, но вы только перенаправляете stderr
к stdout
. Таким образом, правильное перенаправление должно быть следующим, чтобы перезаписать $LOGS
файл.
function1 > "$LOGS" 2>&1 &&
function2 >> "$LOGS" 2>&1 ||
Или, как вы используете bash
, вы можете просто использовать следующие команды.
function1 &> "$LOGS" &&
function2 &>> "$LOGS" ||