如何根据 Bash 中的变量抑制 tee 的输出

如何根据 Bash 中的变量抑制 tee 的输出

因此,在下面的例子中:

echo "text to write to file but also not send to stdout" | tee -a $logfile 1> /dev/null

输出未打印在终端上。但当我尝试根据变量执行相同操作时,它不起作用。

前任:

$loud=""
if [ -z $loud ]; then
  route_devnull="1> /dev/null"
else
  route_devnull=""
fi
echo "text to write to file but also not send to stdout" | tee -a $logfile $route_devnull

我怎样才能使第二个示例发挥作用?或者我应该尝试另一种方法来隐藏消息?

答案1

总结:echo "text to write to file but also not send to stdout" | eval tee -a $logfile $route_devnull

bash不会将变量作为命令进行评估。您可以编写

echo "abc && touch new"

然后它会打印abc && touch new到终端。这是设计使然,因为字符串可以由用户输入,我们不想信任他们的命令,因为他们可能会做恶意的事情,比如试图破坏我们的计算机。

这是哪里eval进来。

eval 不会先执行命令,而是读取并评估所有参数来构造另一个命令,然后执行它。例如:

eval echo "abc && touch new"

只需eval在执行前进行求值即可。我说的“只需”是指“仔细考虑使用eval

相关内容