Один побочный эффект, о котором я могу думать:
Вы могли потерять данные.
Как насчет этого:
echo -n 'magic' | sudo tee /some/where/file > /dev/null
Уверенный существуют перенаправления в этот, но только кладут выполнения для первого удара как корень не оболочка. Работы с dd of=...
также.
Существует другое соображение, которое является, что Вы не хотите помещать значение волшебного cookie на командной строке, так как это может наблюдаться другими пользователями. Даже если программа является недолгой (включая если нули программы строка командной строки), существует возможность для нападения. Так, теоретическое:
writestringtofile 'magic' /some/where/file
опасный подход. Поэтому я подтверждаю предложение @stribika: запишите значение во временный файл и скопируйте его в место. Удостоверьтесь, что использовали безопасную функцию для создания временного файла (mkstemp()
) так, чтобы не было состояния состязания там также.
Без перенаправления вывода, без канала, но с «здесь строка»:
dd of=/some/where/file <<<'magic'
губка от moreutils -впитывает стандартный ввод и записывает в файл:
echo -n 'magic' | sponge /some/where/file
В отличие от перенаправления оболочки, губка впитывает весь ввод перед записью выходного файла. Когда это возможно, губка создает или обновляет выходной файл атомарно, переименовывая временный файл на место.
См. еще
doCommandAsRoot
). И эта функция только принимает путь к команде и ее аргументам, таким образом, нет никакого способа для меня использовать перенаправление вывода сразу же. Я мог пройти оболочку (как показано в вопросе), но мне не нравится это мудрое безопасностью. – zoul 22.02.2011, 18:10doCommandAsRoot("dd", "if=/tmp/unprotected_file", "of=/some/where/file")
. – stribika 22.02.2011, 18:28dd
пример достаточно близок к тому, что я хочу, спасибо. Вы могли думать о чем-то еще более простом? – zoul 22.02.2011, 18:38cp
илиmv
вместоdd
. – mattdm 22.02.2011, 18:51