31

Я использую | sudo tee FILENAME для возможности записи или добавления в файл, для которого довольно часто требуются права суперпользователя.

Хотя я понимаю, почему это полезно в некоторых ситуациях, этот tee также снова отправляет свой вклад в STDOUT, я никогда не использовал эту часть tee для чего-либо полезного. В большинстве случаев эта функция приводит к тому, что мой экран заполняется нежелательным дрожанием, если я не делаю дополнительный шаг и вручную отключаю его с помощью tee 1> /dev/null .

Мой вопрос: есть ли команда arround, которая делает то же самое, что и tee , но по умолчанию ничего не выводит в STDOUT?

6 ответов6

24

Еще одна опция, которая позволяет избежать передачи содержимого обратно и затем в /dev/zero это

sudo command | sudo dd of=FILENAME
5

Решение 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

Жаль, что у него нет возможности подавить стандартный вывод.

2

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

1

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

sudo sh -c 'do_something > FILENAME'
-1

Для этого не существует программы (это единственный случай, когда это будет полезно), но вы можете легко написать свою собственную. Если вы не хотите программировать, вы также можете написать простой скрипт оболочки, который делает то же самое: cat > $1 . Это отличается от помещения его в строку (как предложено опилками), потому что sudo будет применяться ко всему сценарию, включая перенаправление.

-2

Я знаю, что уже слишком поздно, но что я делаю в таких случаях (когда нужен «плоский» стандартный вывод, но также и временный файл):

tee whatever | grep -v ""

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .