### 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`.