Wyjaśniono nieco, dlaczego preferowana jest opcja tee
Zakładając, że masz odpowiednie uprawnienia do wykonania polecenia, które tworzy dane wyjściowe, jeśli potokujesz dane wyjściowe swojego polecenia do tee, wystarczy jedynie podnieść uprawnienia tee za pomocą sudo i skierować tee do zapisu (lub dołączenia) do danego pliku.
w przykładzie podanym w pytaniu oznaczałoby to:
ls -hal /root/ | sudo tee /root/test.out
kilka praktycznych przykładów:
# kill off one source of annoying advertisements
echo 127.0.0.1 ad.doubleclick.net | sudo tee -a /etc/hosts
# configure eth4 to come up on boot, set IP and netmask (centos 6.4)
echo -e "ONBOOT=\"YES\"\nIPADDR=10.42.84.168\nPREFIX=24" | sudo tee -a /etc/sysconfig/network-scripts/ifcfg-eth4
W każdym z tych przykładów pobierasz dane wyjściowe nieuprzywilejowanego polecenia i zapisujesz do pliku, który zwykle jest zapisywalny tylko przez root, który jest źródłem twojego pytania.
Warto to zrobić w ten sposób, ponieważ polecenie generujące dane wyjściowe nie jest wykonywane z podwyższonymi uprawnieniami. Wydaje się, że nie ma to znaczenia, echo
ale gdy polecenie źródłowe jest skryptem, któremu nie całkowicie ufasz, jest to bardzo ważne.
Zauważ, że możesz użyć opcji -a, aby dodać lub dołączyć >>
plik docelowy (jak ) do pliku docelowego, zamiast go zastąpić (jak >
).