Scripting: creating files larger 4096 bytes

Увы, но ROS имеет очень ограниченные возможности чтения-записи в файл. Штатно, по сути, имеется возможность либо создать файл, записав в него содержимое переменной, либо прочитать содержимое всего файла в переменную. А так как размер переменной максимум 4096 символов, то и получается, что нельзя создавать файлы более 4096 байт. Или можно?

Тут на помощь приходит команда… execute. Если глянуть в терминале справку по этой команде, то увидим:

> /execute ?

<script> — source of script to execute in background
file — write script output to file

И вот тут нам на помощь приходит параметр file – всё, что выводит скрипт в консоль, будет перенаправлено в указанный файл.

Для проверки создаем простенький скрипт:

и выполняем его в терминале:

/system script run test_4096

В результате будет создан файл testOut размером почти 70кб. Работает!

То есть чтобы в файл записать больше 4096 байт, нужно сперва написать скрипт, который будет выводить всю нужную информацию в консоль, и потом выполнить этот скрипт с помощью execute, перенаправив вывод в файл.

Реальный пример использования такого трюка можно увидеть тут.

Также такой же трюк использован при отправке файлов по фтп в скрипте бекапа (см. функцию func_ftp в Backuping system v1.4 ) – анализируя содержимое вывода определяем, успешно ли выгружен файл по ftp.

Единственное, что нужно помнить – execute выполняется в фоне, то есть нужно какое-то время, пока скрипт, вывод которого перенаправлен в файл, закончит свое выполнение.