静默回声,不向终端输出

静默回声,不向终端输出

“不合规 - PermitRootLogin”打印到 output.log 和 test1.txt 中。我不是想要回显到终端。我该怎么做?

  echo "NON-Compliance - PermitRootLogin" | tee output.log test1.txt

终端:不合规 - PermitRootLogin

答案1

在原标题中你写了“silence echo”,你还用了标签,但您在终端中看到的内容并非直接来自echo您调用的内容。您的命令如下所示:

echo … | tee …

通常echo打印到其标准输出。echo不会打印到其他任何地方。echo除非终端是其标准输出,否则不会打印到终端。在您的命令中echo打印到管道并tee从管道读取。这echo不会打印到终端。

通常tee打印到作为操作数传递的文件到其标准输出。在您的情况下,其标准输出是终端,这(不是echo)就是您想要静音的内容。您有两个选择:

  1. 将 stdout 重定向tee到其中一个文件,而不是将文件指定为操作数:

    … | tee output.log >test1.txt
    
  2. 或者将 stdout 重定向tee/dev/null(这是一个丢弃写入其中的所有内容的文件):

    … | tee output.log test1.txt >/dev/null
    

    (将 stdout 和/或 stderr 重定向/dev/null一般的使命令静默的方法。


两者之间有细微的差别。在第一种情况下,shell在启动test1.txt之前会创建(如果需要)、截断和打开。在第二种情况下,shell 会执行所有这些操作。teetee

在某些情况下,差异很重要。想象一下,您需要sudo tee …因为test1.txt无法由运行 shell 的普通用户访问。在这种情况下>test1.txt不起作用。事实上sudo tee some_file >/dev/nullsome_file需要 root 权限才能写入的有用技巧

相关内容