Bash:描述符以一种奇怪的方式行事

时间:2017-08-25 12:08:17

标签: linux bash logging stdout descriptor

我将BASH脚本输出重定向到使用变量生成的日志文件中,依此类推。 没问题。 我做了:

exec 6>&1
exec 7>&2
exec 2>&1
exec > /root/backup/report_singoli/$PNAME/$FNAME.log

它完美无瑕。

问题是有时候我希望我的输出在屏幕上的“普通”标准输出中,所以我在描述符6中回显输出,如:

echo "ciao prima" >&6

哪个很好。

从一条线到另一条线,它不再起作用了。 我做了一些调试,结果就出现了问题:

echo "THIS WORKS FINE" >&6

if [ ! -f "/root/tmpfs/$PNAME/backup_end_time.txt" ]; then
    if [ -f "/root/tmpfs/$PNAME/backup_start_time.txt" ]; then
                echo ""
                echo "Il backup per l'ambiente $$FNAME - $ENVAR non è ancora completato! Salto questo ambiente..."
                echo ""
                sleep 1s
                return 0
        else
                echo ""
                echo "Sembra che l'ambiente $FNAME - $ENVAR non stia facendo alcun tipo di backup..."
                echo ""
                sleep 1s
                return 0
        fi
else
        echo ""
        echo "File semaforo verde, procediamo..."
        echo ""
        sleep 1s
fi

echo "THIS IS NOT WORKING" >&6

我想知道那个街区有什么问题。

从那一点开始,没有输出适用于>& 6(仍然记录在文件中),即使我从func退出并再次启动func (如:

    func random {

showing
BROKEN PART
not showing

}

random

echo "this is random!"

random

更奇怪的是,即使我重置像

这样的描述符
exec 1>&6 6>&-
exec 2>&7 7>&-

stdout仍然没有出现在屏幕上(正常回声“尝试”没有“>”)

任何帮助?

此处的完整脚本:https://pastebin.com/GdVQgETa 警告:长期和严重的用户和密码!

0 个答案:

没有答案