Next: , Previous: Syscmd, Up: Shell commands


12.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 error output 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.

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.