| \subsubsection{Structure of the configuration files} |
| |
| The config files are divided into sections and options/values. |
| |
| Every section has a type, but does not necessarily have a name. |
| Every option has a name and a value and is assigned to the section |
| it was written under. |
| |
| Syntax: |
| |
| \begin{Verbatim} |
| config <type> ["<name>"] # Section |
| option <name> "<value>" # Option |
| \end{Verbatim} |
| |
| Every parameter needs to be a single string and is formatted exactly |
| like a parameter for a shell function. The same rules for Quoting and |
| special characters also apply, as it is parsed by the shell. |
| |
| \subsubsection{Parsing configuration files in custom scripts} |
| |
| To be able to load configuration files, you need to include the common |
| functions with: |
| |
| \begin{Verbatim} |
| . /lib/functions.sh |
| \end{Verbatim} |
| |
| Then you can use \texttt{config\_load \textit{<name>}} to load config files. The function |
| first checks for \textit{<name>} as absolute filename and falls back to loading |
| it from \texttt{/etc/config} (which is the most common way of using it). |
| |
| If you want to use special callbacks for sections and/or options, you |
| need to define the following shell functions before running \texttt{config\_load} |
| (after including \texttt{/lib/functions.sh}): |
| |
| \begin{Verbatim} |
| config_cb() { |
| local type="$1" |
| local name="$2" |
| # commands to be run for every section |
| } |
| |
| option_cb() { |
| # commands to be run for every option |
| } |
| \end{Verbatim} |
| |
| You can also alter \texttt{option\_cb} from \texttt{config\_cb} based on the section type. |
| This allows you to process every single config section based on its type |
| individually. |
| |
| \texttt{config\_cb} is run every time a new section starts (before options are being |
| processed). You can access the last section through the \texttt{CONFIG\_SECTION} |
| variable. Also an extra call to \texttt{config\_cb} (without a new section) is generated |
| after \texttt{config\_load} is done. |
| That allows you to process sections both before and after all options were |
| processed. |
| |
| Another way of iterating on config sections is using the \texttt{config\_foreach} command. |
| |
| Syntax: |
| \begin{Verbatim} |
| config_foreach <function name> [<sectiontype>] [<arguments...>] |
| \end{Verbatim} |
| |
| This command will run the supplied function for every single config section in the currently |
| loaded config. The section name will be passed to the function as argument 1. |
| If the section type is added to the command line, the function will only be called for |
| sections of the given type. |
| |
| |
| You can access already processed options with the \texttt{config\_get} command |
| Syntax: |
| |
| \begin{Verbatim} |
| # print the value of the option |
| config_get <section> <option> |
| |
| # store the value inside the variable |
| config_get <variable> <section> <option> |
| \end{Verbatim} |
| |
| In busybox ash the three-option \texttt{config\_get} is faster, because it does not |
| result in an extra fork, so it is the preferred way. |
| |
| Additionally you can also modify or add options to sections by using the |
| \texttt{config\_set} command. |
| |
| Syntax: |
| |
| \begin{Verbatim} |
| config_set <section> <option> <value> |
| \end{Verbatim} |
| |
| If a config section is unnamed, an automatically generated name will |
| be assigned internally, e.g. \texttt{cfg1}, \texttt{cfg2}, ... |
| |
| While it is possible, using unnamed sections through these autogenerated names is |
| strongly discouraged. Use callbacks or \texttt{config\_foreach} instead. |
| |