123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- \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.
|