Dlaczego jest to, że prawie wszystkie instrukcje dotyczące dopisywania tekstu do plików systemowych, jak fstab
i /etc/apt/sources.list.d/<name>.list
obejmować zastosowanie tee
i echo
dołączyć mówi tekst?
Weź następujące przykłady, które są uruchamiane jako 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
Bieganie diff -u file1 file2
nic nie zwraca; uruchomione md5sum file1 file2
pokazuje, że ich sumy kontrolne są identyczne, co przywraca moje pierwotne pytanie:
Dlaczego jest | tee <FILENAME>
tak powszechny we wszystkich dokumentach Ubuntu, czy jest to po prostu dobra praktyka, w przeciwnym razie nie byłoby łatwiej po prostu użyć przykładu 2 zamiast przekazywać dane wyjściowe z echo
do tee
?
command-line
tee
Alexej Magura
źródło
źródło
Odpowiedzi:
Jest różnica: tee duplikuje dane wyjściowe: wysyła je zarówno do pliku, jak i do wyświetlacza.
Ale jest więcej:
Na przykład, jeśli chcesz zapisać ciąg znaków w dwóch plikach jednocześnie, możesz użyć polecenia z tee:
Kolejną rzeczą, która może ci pomóc, jest uniknięcie jednego problemu podczas używania sudo. Normalny operator przekierowania wyjścia jest zawsze wykonywany z uprawnieniami użytkownika, również podczas pisania sudo przed poleceniem, które generuje tekst STDOUT. Innymi słowy, to się nie powiedzie, jeśli nie masz uprawnień do zapisu do tego pliku:
Ale z tee wszystko pójdzie dobrze:
2 przykłady z tej strony . Ma trochę więcej.
źródło
sudo
beztee
-sudo sh -c 'echo SOMETHING > FILE'
...;)"
, robi się bałaganecho "some text" | tee file1 file2 ... fileN
i może dołączyć> /dev/null
, jeśli nie chcesz bałaganu na standardowym wyjściu.tee
pobiera standardowy strumień wejściowy i zapisuje go zarówno w standardowym strumieniu wyjściowym, jak i w strumieniu plików. Jeśli pomaga ludziom pamiętać, nazwa polecenia pochodzi od rozdzielacza T w hydraulice. Jest ładny artykuł na Wikipedii, w którym dowiedziałem się o pochodzeniu nazwy polecenia.źródło
Po pierwsze,
tee
sam nie dołącza tekstu ani nie>
.Jest
tee -a
i jego uzupełnieniem,>>
że DODAWA tekst.Nie wierzę, że wszystkie powłoki obsługują tę
>>
funkcję, dlategotee
jest częściej używana. (Pomyśl o zwykłym starymsh
). Tee to polecenie, a>>
operator.Jeśli używasz (mój osobisty faworyt)
bash
,>
i>>
są dużo ładniejsze / łatwiejsze.Użycie
tee
pozwala także na sudo PO PROSTU to polecenie, więc nie musisz sudo całej instrukcji, jak wsudo sh -c "echo foo > bar"
.tee
pozwala również podzielić wynik. Oczywiście wszystko to można zobaczyć wman tee
. To głównie twoje osobiste preferencje.Więcej informacji można znaleźć tutaj i tutaj .
źródło
sudo somecommand >> filea
uzna to za trochę skomplikowane: użycie formularza podobnego uruchomi się,sudo somecommand
a następnie, jako użytkownik wywołujący , dołączy wynikfilea
. Używaniesudo sh -c "somecommand >> filea"
działa, ale może powodować koszmary z cytowaniem zagnieżdżonym. Użyciesomecommand | sudo tee -a filea
uruchamia sięsomecommand
jako użytkownik wywołujący, a następnie dołącza dane wyjściowefilea
jako root - czego zwykle chce użytkownik.