不帶 STDOUT 的 tee 指令的替代方案

不帶 STDOUT 的 tee 指令的替代方案

我曾經| sudo tee FILENAME能夠寫入或附加到經常需要超級使用者權限的檔案。

儘管我理解為什麼它在某些情況下很有用,但它tee也會再次將其輸入發送到 STDOUT,但我從未真正將這部分tee用於任何有用的事情。在大多數情況下,如果我不採取額外的步驟並使用 手動將其靜音,此功能只會導致我的螢幕充滿不必要的抖動tee 1> /dev/null

我的問題:是否有一個命令 arround ,它的作用與 完全相同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 沒有抑制標準輸出的選項。

答案3

您可以使用腳本。 Ie 在 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 /根/foo

答案4

您可以將整個命令包裝到 sudo 中,因此 shell 本身以及重定向的執行方式如下root

sudo sh -c 'do_something > FILENAME'

相關內容