我正在编写一个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"
非常感谢任何输入。
答案 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
}