替代不带STDOUT的tee命令


37

| sudo tee FILENAME过去经常能够写入或追加到需要超级用户权限的文件。

尽管我理解为什么它在某些情况下会有所帮助,但tee也会将其输入再次发送到STDOUT,但我从未真正将这部分内容tee用于任何有用的事情。在大多数情况下,如果我不执行额外的步骤并使用手动将其静音,则此功能只会使我的屏幕充满不必要的抖动tee 1> /dev/null

我的问题:是否有一个命令arround,它与完全一样tee,但是默认情况下不向STDOUT输出任何内容?


如果更换teecat >filename,你得到的结果是你想要什么?
锯末

4
cat不会自行写入文件。>我的当前用户无法写入文件,因此操作员无法使用。因此,没有帮助。并且请停止每2秒完全更改您评论的含义。换一个新的。
aef

如果更换| sudo tee FILENAME| sudo cat >filename,你得到的结果是你想要什么?
锯末

4
否,>操作员使用当前的shell用户写入文件。该用户没有必要的权限。cat完全没有用。
aef

Answers:



6

dd解决方案仍然将垃圾输出到stdout:

$ ls | sudo dd of=FILENAME
0+1 records in
0+1 records out
459 bytes (459 B) copied, 8.2492e-05 s, 5.6 MB/s

使用以下status选项可以避免这种情况:

command | sudo dd status=none of=FILENAME

另一个有趣的可能性(对于Linux而言):

command | sudo cp /dev/stdin FILENAME

要将TTY输入复制到文件中,我经常这样做:

sudo cp /dev/tty FILENAME

太糟糕了,tee无法抑制stdout。


4

您可以使用脚本。即把这样的事情在IE中$HOME/bin/stee0tee或类似:

#!/bin/bash

argv=
while [[ "$1" =~ ^- ]]; do
    argv+=" $1"
    shift
done

sudo tee $argv "$1" > /dev/null

#!/bin/bash

sudo tee "$@" > /dev/null

使它可执行:

$ chmod 755斯蒂

现在做:

$ ls -la | stee -a / root / foo


1
编写脚本并将其部署到我正在使用的所有系统上并不是我想要的,但是在有人命名一个已经存在的工具之前,我想我会使用您的解决方案。
aef 2012年

2
确实。我想自己看。很久以前,我用C编写了一个程序,该程序完成了您所要求的操作,但是很长一段时间后它却被遗忘了。当时几乎没有兴趣。但是话又说回来,我实际上并没有做太多广告。
卡·斯坦

2

您可以将整个命令包装到sudo中,因此外壳本身以及重定向的执行方式如下root

sudo sh -c 'do_something > FILENAME'

-1

没有直接执行此操作的程序(这几乎是唯一有用的时间),但是您可以轻松编写自己的程序。如果您不想编程,也可以编写一个简单的shell脚本来执行相同的操作:cat > $1。这与将其内联(如建议的锯末)不同,因为sudo将应用于整个脚本,包括重定向。


-2

我知道为时已晚,但是在这种情况下(当需要“ flat” stdout但还需要一个临时文件时),我要做的是:

tee whatever | grep -v ""

您能否进一步说明该命令的作用?
Vylix

与tee> / dev / null相同,但是管道传递给不匹配的grep。
00prometheus

与将输出重定向到相比/dev/null,这听起来更加骇人听闻,并且不会使命令更短。使用此方法而不是原始方法的好处是什么?
waldyrious
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.