【问题标题】:Howto :: dynamically add string to command如何::动态添加字符串到命令
【发布时间】:2020-04-24 18:14:33
【问题描述】:


不幸的是,我正在为某种“简单的想法”而苦苦挣扎。
在我的 Bash 脚本中,我正在检查一个变量,如果它已设置,我将向用户打印输出(有点详细/显示输出)。

[ ! -z $boolVerbose ] && fnc_print2user "i" "Print to user in one-line"

这对我来说很好用。
现在我有不允许抑制其输出的命令,所以如果我上面的变量设置/不为空,我想隐藏它或显示它。

我尝试了以下(以及其他几个选项..),按原样运行命令(意味着:显示输出),期望变量未设置/为空,然后它应该附加“&> /dev/ null" 到之前的命令(所以禁止输出)。

commandWithOutput $([ -z $boolVerbose ] && echo " &> /dev/null")

如果我设置了详细变量,脚本运行良好,但如果没有设置,我的 commandWithOutput 会抛出一个错误,指出设置了无效的参数(如果我硬编码以抑制每次它像魅力一样工作)。

是否可以像上面那样在单行中进行某种动态命令调整,还是我必须在内部使用不同的 commandWithOutput 方法构建真正的 if-else 语句? 提前感谢您的想法和帮助! :-)

【问题讨论】:

    标签: bash if-statement dynamic


    【解决方案1】:

    我认为这大致可以满足您的需求:

    commandWithOutput &> /dev/$([ -z "$boolVerbose" ] && echo null || echo stdout)
    

    【讨论】:

      【解决方案2】:

      将输出重定向到不同的文件描述符。根据需要使用exec 将此描述符重定向到输出或/dev/null。

      #!/bin/bash
      for hide in 0 1 ; do
          if ((hide)) ; then
              exec 3>/dev/null
          else
              exec 3>&1
          fi
          echo $hide: something >&3
          exec 3>&-
      done
      

      【讨论】:

        猜你喜欢
        • 2014-04-30
        • 2020-01-28
        • 2021-01-04
        • 1970-01-01
        • 1970-01-01
        • 2018-08-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多