Я использую его | 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'