m4: Esyscmd
13.3 Reading the output of commands
===================================
If you want 'm4' to read the output of a shell command, use 'esyscmd':
-- Builtin: esyscmd (SHELL-COMMAND)
Expands to the standard output of the shell command SHELL-COMMAND.
Prior to executing the command, 'm4' flushes its buffers. The
default standard input and standard error of SHELL-COMMAND are the
same as those of 'm4'. The error output of SHELL-COMMAND is not a
part of the expansion: it will appear along with the error output
of 'm4'.
By default, the SHELL-COMMAND will be used as the argument to the
'-c' option of the '/bin/sh' shell (or the version of 'sh'
specified by 'command -p getconf PATH', if your system supports
that). If you prefer a different shell, the 'configure' script can
be given the option '--with-syscmd-shell=LOCATION' to set the
location of an alternative shell at GNU 'm4' installation; the
alternative shell must still support '-c'.
The macro 'esyscmd' is recognized only with parameters.
define(`foo', `FOO')
=>
esyscmd(`echo foo')
=>FOO
=>
Note how the expansion of 'esyscmd' keeps the trailing newline of the
command, as well as using the newline that appeared after the macro.
Just as with 'syscmd', care must be exercised when sharing standard
input between 'm4' and the child process of 'esyscmd'.