
| 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'