因此,在下面的例子中:
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
”