Почему почти все инструкции относительно добавления текста в системные файлы, такие как fstab
и /etc/apt/sources.list.d/<name>.list
включают использование tee
и echo
добавление указанного текста?
Возьмите следующие примеры, которые запускаются от имени пользователя root :
## 1
echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | tee -a file1
## 2
echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' >> file2
Бег diff -u file1 file2
ничего не возвращает; Бег md5sum file1 file2
показывает, что их контрольные суммы идентичны, что возвращает меня к моему первоначальному вопросу:
Почему это | tee <FILENAME>
так распространено в документации по Ubuntu, это просто хорошая практика, иначе не было бы проще просто использовать пример 2 вместо передачи вывода из echo
в tee
?
command-line
tee
Алексей Магура
источник
источник
Ответы:
Есть разница: тройник дублирует вывод: он отправляет его как в файл, так и на дисплей.
Но есть еще:
Например, если вы хотите записать некоторую строку в два файла одновременно, вы можете использовать команду с tee:
Еще одна вещь, которая может вам помочь, - это избежать одной проблемы при использовании sudo. Обычный оператор перенаправления вывода всегда выполняется с вашими правами пользователя, даже когда вы пишете sudo перед командой, которая генерирует текст STDOUT. Другими словами, это не удастся, если у вас нет разрешения на запись в этот файл:
Но с тройником все пойдет хорошо
2 примера с этого сайта . Это еще немного.
источник
sudo
безtee
-sudo sh -c 'echo SOMETHING > FILE'
...;)"
, все становится грязноecho "some text" | tee file1 file2 ... fileN
и, возможно, добавил> /dev/null
, если вы не хотите, чтобы беспорядок на stdout.tee
берет стандартный поток ввода и записывает его как в стандартный поток вывода, так и в поток файла. Если это помогает людям помнить, имя команды происходит от Т-сплиттера в сантехнике. Есть хорошая статья в Википедии, где я узнал о происхождении названия команды.источник
Прежде всего,
tee
сам текст не добавляет и не добавляет>
.Именно
tee -a
и дополняет,>>
что добавляет текст.Я не верю, что все оболочки поддерживают эту
>>
функцию, поэтомуtee
чаще используются. (Подумайте только о старомsh
). Ти - команда, а>>
оператор.Если вы используете (мой личный фаворит)
bash
,>
и>>
гораздо приятнее / проще.Использование
tee
также позволяет вам sudo ПРОСТО эту команду, так что вам не нужно sudo весь оператор, как вsudo sh -c "echo foo > bar"
.tee
также позволяет разделить вывод. Конечно, все это можно увидеть вman tee
. Это в основном только ваши личные предпочтения.Для дальнейшего чтения смотрите здесь и здесь .
источник
sudo somecommand >> filea
запуске запускается подобная форма ,sudo somecommand
а затем, в качестве вызывающего пользователя, добавляются выходные данныеfilea
. Использованиеsudo sh -c "somecommand >> filea"
работает, но может вызвать кошмары с вложенными цитатами. Использованиеsomecommand | sudo tee -a filea
запускаетсяsomecommand
от имени вызывающего пользователя, а затем добавляет выходные данные вfilea
качестве пользователя root - что обычно и требуется пользователю.