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'.