Альтернатива команде tee без STDOUT

Альтернатива команде tee без STDOUT

Я использую его | 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 нет возможности подавить stdout.

решение3

Вы можете использовать скрипт. Например, поместить что-то вроде этого в 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 stee

Теперь сделайте следующее:

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

решение4

Вы можете обернуть всю команду в sudo, тогда сама оболочка, а также перенаправления будут выполняться следующим образом root:

sudo sh -c 'do_something > FILENAME'

Связанный контент