如何在bash

时间:2016-03-03 20:03:02

标签: bash

我正在编写一个bash样板文件,以便在我们的内部项目中重用。其中一个功能是支持noop,调试和记录到文件的输出功能。这工作正常,直到我重定向输出时尝试使用它。这是我当前版本的代码以及失败的示例:

function output () {
  if [ "$NOOP" == 'true' ]; then
      if [ "$DEBUG" == 'true' ]; then
          echo "$1" |& tee -a $LOGFILE
      else
          echo "$1"
      fi
  else
      if [ "$DEBUG" == 'true' ]; then
          echo "Command: $1" |& tee -a $LOGFILE
          ( $1 ) |& tee -a $LOGFILE
      else
          ( $1 ) 2>&1 >> $LOGFILE
      fi
  fi    
}

output "echo test > test.log"

非常感谢任何输入。

1 个答案:

答案 0 :(得分:1)

扩展变量后,不会处理Shell元字符,但字拆分和文件名通配符除外。因此>;等字符在那里没有任何特殊含义。

正如您在标题中所说,您需要使用eval

function output () {
  if [ "$NOOP" == 'true' ]; then
      if [ "$DEBUG" == 'true' ]; then
          echo "$1" |& tee -a $LOGFILE
      else
          echo "$1"
      fi
  else
      if [ "$DEBUG" == 'true' ]; then
          echo "Command: $1" |& tee -a $LOGFILE
          eval "$1" |& tee -a $LOGFILE
      else
          eval "$1" 2>&1 >> $LOGFILE
      fi
  fi    
}