Есть ли какое-либо значение для использования тройника?

Почему почти все инструкции, касающиеся добавления текста в системные файлы, такие как 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 показывает, что их значения md5 идентичны, что возвращает меня к моему первоначальному вопросу:

Почему | tee <FILENAME> так распространен во всех документах Ubuntu, это просто хорошая практика, иначе не было бы проще просто использовать пример 2 вместо передачи вывода из echo в tee?

47
задан 31 January 2017 в 03:04

3 ответа

Существует различие: они дублируют вывод: он отправляет его как в файл, так и на дисплей.

Но есть и другое:

  • Например, если вы хотите записать некоторую строку в два файла одновременно, вы можете использовать команду с tee:

     echo "some text" | tee file1 > file2  
    
  • Еще одна вещь, которая может вам помочь, - это избежать одной проблемы при использовании sudo. Обычный оператор перенаправления вывода всегда выполняется с вашими правами пользователя, даже когда вы пишете sudo перед командой, которая генерирует текст STDOUT. Другими словами, это не удастся, если у вас нет разрешения на запись в этот файл:

     sudo echo "something" > bar  
    

    Но с тройником все пойдет хорошо:

    echo "something" | sudo tee bar  
    

2 примера из этого сайта . Это еще немного.

0
ответ дан 31 January 2017 в 03:04

Прежде всего, tee сам не добавляет текст, как и >.

Это tee -a и его дополнение, >>, которое ПРИЛОЖИТ текст.

Я не верю, что все оболочки поддерживают функцию >>, поэтому tee используется чаще. (Подумайте только о старом sh). Tee - команда, а >> - оператор.

Если вы используете (мой личный фаворит), то bash, > и >> намного приятнее / проще.

Использование tee также позволяет вам выполнить sudo ПРОСТО эту команду, чтобы вам не пришлось выполнять sudo весь оператор, как в sudo sh -c "echo foo > bar". tee также позволяет разделить вывод. Конечно, все это можно увидеть в man tee. В основном это только ваши личные предпочтения.

Для дальнейшего чтения см. здесь и здесь .

0
ответ дан 31 January 2017 в 03:04

tee берет стандартный поток ввода и записывает его в как стандартный поток вывода, так и поток файлов. Если это помогает людям помнить, имя команды происходит от Т-сплиттера в сантехнике. Есть хорошая статья в Википедии , где я узнал о происхождении названия команды.

enter image description here enter image description here

0
ответ дан 31 January 2017 в 03:04

Другие вопросы по тегам:

Похожие вопросы: