Разъяснение, почему предпочтителен вариант тройника
Предполагая, что у вас есть соответствующее разрешение на выполнение команды, которая создает выходные данные, если вы передаете выходные данные своей команды на tee, вам нужно только повысить привилегии tee с помощью sudo и прямой tee для записи (или добавления) в файл в вопрос.
в приведенном в вопросе примере это будет означать:
ls -hal /root/ | sudo tee /root/test.out
для пары более практических примеров:
# 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
В каждом из этих примеров вы берете выходные данные непривилегированной команды и записываете в файл, который обычно доступен для записи только пользователю root, что является источником вашего вопроса.
Это хорошая идея, потому что команда, генерирующая вывод, не выполняется с повышенными привилегиями. Это не имеет значения здесь с echo
, но когда исходная команда является сценарием, которому вы не полностью доверяете, это крайне важно.
Обратите внимание, что вы можете использовать опцию -a для добавления операции добавления (например, >>
) в целевой файл, а не перезаписи его (например, >
).