Next: Sysval, Previous: Syscmd, Up: Shell commands [Contents][Index]
If you want m4 to read the output of a shell command, use
esyscmd:
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.