【问题标题】:Filter specific output of bash -x过滤 bash -x 的特定输出
【发布时间】:2017-09-11 18:08:13
【问题描述】:

我正在尝试过滤执行 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 !
#

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

【问题讨论】:

    标签: linux bash shell


    【解决方案1】:

    特殊变量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" ...
    

    【讨论】:

    • 感谢您的回答,我刚刚尝试过,它似乎没有隐藏 +++ 输出,也没有将它们重定向到 commands.txt 。文件为空。 -f 选项指定会话日志以供以后重播会话。是的,我需要它。我想要的基本上是来自脚本日志记录命令的会话日志和一个包含由 shell 脚本执行的命令的文本文件。
    • 是的,基本上我希望所有内容都重定向到 commands.log ,还有错误。
    • 在这种情况下只需更改2>之后的文件,并保留默认的xtrace文件描述符
    • 哦,也许我明白你只想要 menu.sh 脚本的错误输出而不是脚本的错误,我更新了我的答案
    • 谢谢,但上面的“bash -x ./menu.sh 2> err_and_commands.log”也与其他消息一起隐藏/重定向了whiptail视图。 menu.sh 包含whiptail 菜单窗口。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-19
    • 1970-01-01
    • 2022-11-30
    • 2023-04-08
    • 1970-01-01
    相关资源
    最近更新 更多