我正在修改负责安装的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)发送到终端的方法,或者至少不要将命令发送到日志文件。
提前致谢。
答案 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
$