Shell脚本 - 强制输出到函数内的命令行

时间:2017-01-26 14:35:04

标签: bash shell unix

我正在修改负责安装的shell脚本。该脚本具有多个功能,并且必须将所有输出重定向到日志文件。 但是,在每个功能的开头,我必须在终端中打印类似"启动功能"。会发生的事情是,当我在代码块中调用函数时,因为我将该代码块的输出重定向到日志文件,所有内容都被重定向,甚至是我想在终端中显示的第一个信息。

功能示例:

function_xpto() {
        echo -n "starting function ...."

        if  (   {
                    command1 && command2 && ... && commandN;
                } >> $LOG_FILE 2>&1
            );
        then
            echo "SUCCESS"
        else
            echo "FAILED"
            exit 1
        fi;
}

调用该函数的示例:

        echo -n "running script"

        if  (   {
                    command1 && function_xpto;
                } >> $LOG_FILE 2>&1
            );
        then
            echo "SUCCESS"
        else
            echo "FAILED"
            exit 1
        fi;

当我在代码块中调用函数时,所有内容(我理解为什么)都被重定向。

所以,我想要一种强制命令(例如:echo)发送到终端的方法,或者至少不要将命令发送到日志文件。

提前致谢。

2 个答案:

答案 0 :(得分:1)

/dev/tty是流程的控制终端,如果它有一个。

function_xpto() {
        echo -n "starting function ...." > /dev/tty

        if  (   {
                    command1 && command2 && ... && commandN;
                } >> $LOG_FILE 2>&1
            );
        then
            echo "SUCCESS"
        else
            echo "FAILED"
            exit 1
        fi;
}

答案 1 :(得分:-1)

 echo -n "running script" > /proc/$PPID/fd/1

@chepner的示例:

$ cat subshell.sh
#!/bin/bash
write () { echo noppid
echo echowithppid > /proc/$PPID/fd/1
}
write >/dev/null 2>&1
$ ./subshell.sh
echowithppid
$