过滤bash -x的特定输出

时间:2017-09-11 08:55:23

标签: linux bash shell

我试图过滤执行bash -x命令时产生的特定输出。这是我的代码:

            touch ./log/time_$now_time.txt
            touch ./log/session_$now_time.log
            case $multinode in
                            true)whiptail --title "Multinode system" --msgbox "Multinode system found! Redirecting to the Multinode Menu... " 10 60
                                    cd multinode
                                    script -q -t 2> ../log/time_$now_time.txt -c "bash -x ./menu.sh" -f ../log/session_$now_time.log ;;
                            false)whiptail --title "Singlenode system" --msgbox "Singlenode system found!Redirecting to the Singlenode Menu..." 10 60
                                    cd singlenode
                                    script -q -t 2> ../log/time_$now_time.txt -c "bash -x ./menu.sh" -f ../log/session_$now_time.log;;
                            *)
                                    echo "Invalid option. Quitting"
                                    break ;;
            esac

有没有办法记录bash -x生成的所有+++输出,但不能显示它? 如果我将所有输出重定向到/ dev / null我也会丢失whiptail视图,但是我不想丢失bash -x输出,但只是不显示。

以下是我开始编写脚本时的内容:

+++ date +%d_%m_%Y
++ now=11_09_2017
+ true
++ whiptail --title 'Multinode Main Menu' --menu '\n\n\n\n\n\n\n\n'...
+ case $OPTION in
+ echo 'Bye !'
Bye !
#

如何隐藏所有+++行,但是将它们记录在会话日志文件中?

1 个答案:

答案 0 :(得分:0)

特殊变量BASH_XTRACEFD允许使用另一个文件描述符而不是2。 [参考文献] [1] https://www.gnu.org/software/bash/manual/html_node/Bash-Variables.html

exec 5> commands.txt
BASH_XTRACEFD=5
set -x

或整合提供的脚本

... "BASH_XTRACEFD=5 bash -x ./menu.sh 5> commands.log" ...

此外,错误输出(2>)会在script -f选项提供的同一文件中重定向,是否需要?

将menu.sh的错误和命令放在单独的文件中而不是gnu script消息

... "bash -x ./menu.sh 2> err_and_commands.log" ...