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
いいえ、>オペレーターは現在のシェルユーザーを使用してファイルに書き込みます。このユーザーには必要な権限がありません。catそのためにはまったく役に立ちません。
aef

回答:


30

物を配管してから配管することを回避する別のオプション/dev/zero

sudo command | sudo dd of=FILENAME

1
まさに私が探していたもの。まことにありがとうございます。
aef

4
superuser.com/a/850294/68284は、追加oflag=append conv=notruncに使用ddする追加オプションについて説明しています。
aef

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

Tには標準出力を抑制するオプションがありません。


4

スクリプトを使用できます。すなわち$HOME/bin/stee、ie 、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

つまり、つまり:

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


1
スクリプトを作成し、それを作業中のすべてのシステムに展開することは、私が望んでいたものとはまったく異なります。
aef

2
確かに。自分で見たいです。私はあなたが尋ねたことをするプログラムを長い間Cで書いていましたが、それは長い間忘れられていました。戻ったときはほとんど興味がありませんでした。しかし、再び私は実際にそれをあまり宣伝しませんでした。
ルカスタイン

2

コマンド全体をsudoにラップできるため、シェル自体とリダイレクトは次のように実行されrootます。

sudo sh -c 'do_something > FILENAME'

-1

直接それを行うプログラムはありませんが(これが役に立つのはほとんどこれだけの時間です)、自分で簡単に書くことができます。プログラムしたくない場合は、同じことを行う単純なシェルスクリプトを記述することもできますcat > $1。sudoはリダイレクトを含むスクリプト全体に適用されるため、これは(おがくずが示唆するように)インラインに置くこととは異なります。


-2

私は少し遅すぎることを知っていますが、そのような場合(「フラット」な標準出力だけでなく一時ファイルも必要な場合)に私がすることは次のとおりです:

tee whatever | grep -v ""

このコマンドの実行内容をさらに詳しく説明できますか?
-Vylix

tee> / dev / nullと同じですが、代わりに何にも一致しないgrepにパイプします。
-00prometheus

これは、出力を/dev/nullにリダイレクトするよりもはるかにハックに聞こえ、コマンドを短くしません。元の方法の代わりにこれを使用する利点は何でしょうか?
ウォルディリアス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.