STDOUT なしの tee コマンドの代替

STDOUT なしの tee コマンドの代替

| sudo tee FILENAMEスーパーユーザー権限が頻繁に必要なファイルに書き込みまたは追加できるようにするために使用しています。

tee入力を STDOUT に再度送信する が状況によっては役立つ理由は理解していますが、 のその部分を実際teeに役に立つ用途に使用したことはありません。 ほとんどの場合、この機能は、追加の手順を実行して で手動でサイレントにしない限り、画面に不要なジッターがいっぱいになるだけですtee 1> /dev/null

質問: とまったく同じことを実行しますteeが、デフォルトでは STDOUT に何も出力しないコマンド arround はありますか?

答え1

パイプを戻して次に送るのを避けるもう一つの方法/dev/zero

sudo command | sudo dd of=FILENAME

答え2

このddソリューションでは、依然として標準エラー出力にジャンクが出力されます。

$ 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

スクリプトを使うこともできます。たとえば、 $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 スチール

次に、次の操作を実行します。

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

答え4

コマンド全体を sudo で囲むと、シェル自体とリダイレクトが次のように実行されますroot

sudo sh -c 'do_something > FILENAME'

関連情報