我曾經| 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/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 斯蒂
現在做即:
$ ls -la | stee -a /根/foo
答案4
您可以將整個命令包裝到 sudo 中,因此 shell 本身以及重定向的執行方式如下root
:
sudo sh -c 'do_something > FILENAME'