【问题标题】:Bash output limited to echo onlyBash 输出仅限于回显
【发布时间】:2023-03-05 19:11:01
【问题描述】:

我正在编写一个 bash 脚本来处理备份。我创建了一个消息函数控制器,它使用函数来处理电子邮件、日志和输出。

所以结构如下:

message_call(i, "这是输出")

消息功能

-> 传递到电子邮件功能 --> 建立邮件文件

-> 传递给日志函数 --> 构建日志文件

-> 传递给 echo 函数(自定义) --> 格式化和回显输入取决于 $1 作为开关和 $2 作为输出消息

当我回显时,我想要只包含传递给回显函数的消息的干净输出,我可以指向所有输出 /dev/null 但我正在努力限制除回显命令之外的所有输出。

当前输出样本:

craig@ubuntu:~/backup/functions$ sudo ./echo_function.sh i test
+ SWITCH=i
+ INPUT=test
+ echo_function
+ echo_main
+ echo_controller i test
+ '[' i == i ']'
+ echo_info test
+ echo -e '\e[32m\e[1m[INFO]\e[0m test'
[INFO] test
+ echo test
test
+ '[' i == w ']'
+ '[' i == e ']'

上面我单独运行了 echo 函数,我想要的输出在第 10 行,示例中的所有其他输出都是我不想要的。

【问题讨论】:

    标签: linux bash shell backup echo


    【解决方案1】:

    如果您想隐藏所有输出,除了您在 echo 函数中明确执行的操作之外,您可以执行以下操作:

    exec 7>&1 # save a copy of current stdout
    exec >/dev/null # redirect everyone else's stdout to /dev/null
    ls # output goes to /dev/null
    echo My Message >&7 # output goes to "old" stdout
    

    【讨论】:

      【解决方案2】:

      如果您的脚本中有set -x 行,请将其注释掉。如果没有,请尝试在脚本顶部添加 set +x

      【讨论】:

      • 是的,在脚本的顶部,“#!/bin/bash -x”,我删除了 -x,现在已修复,感谢您指出这一点,例如一个简单的解决方案,现在已经工作了几个小时哈哈。谢谢!
      • @CraigLowe,请参阅我的编辑。另请参阅 help set 以了解 set -x 的作用。
      猜你喜欢
      • 1970-01-01
      • 2022-01-11
      • 2013-10-12
      • 2012-01-03
      • 1970-01-01
      • 2017-08-27
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      相关资源
      最近更新 更多