我| sudo tee FILENAME
经常使用它来写入或附加需要超级用户权限的文件。
虽然我理解在某些情况下它很有用,但它tee
也会将其输入再次发送到 STDOUT,但我从未真正将这一部分tee
用于任何有用的目的。在大多数情况下,如果我不采取额外措施并使用 手动将其静音,此功能只会导致我的屏幕充满不必要的抖动tee 1> /dev/null
。
我的问题是:是否存在一个命令,它的功能与完全相同tee
,但默认情况下不会向 STDOUT 输出任何内容?
答案1
避免将材料输送回去的另一种方法/dev/zero
是
sudo command | sudo dd of=FILENAME
答案2
解决dd
方案仍然会将垃圾信息打印到 stderr:
$ 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 的选项。
答案3
您可以使用脚本。在 ie 中输入类似以下内容$HOME/bin/stee
,0tee
或类似内容:
#!/bin/bash
argv=
while [[ "$1" =~ ^- ]]; do
argv+=" $1"
shift
done
sudo tee $argv "$1" > /dev/null
#!/bin/bash
sudo tee "$@" > /dev/null
使其可执行:
$ chmod 755 stee
现在执行 ie:
$ ls -la | stee -a /root/foo
答案4
您可以将整个命令包装到 sudo 中,因此 shell 本身以及重定向将按如下方式执行root
:
sudo sh -c 'do_something > FILENAME'