Разъяснение, почему предпочтительным является вариант тройника
Предполагая, что у вас есть соответствующее разрешение на выполнение команды, которая создает выходные данные, если вы перенаправили выходные данные своей команды на 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, чтобы добавить add (например >>
) в целевой файл, а не перезаписать его (например >
).