How to execute shell script from LaTeX?

yegor256 picture yegor256 · Jul 15, 2010 · Viewed 38.6k times · Source

I'm trying to do the following in LaTeX:

\documentclass{article}
\begin{document}
\execute{/usr/local/bin/my-shell-script.sh}
\end{document}

The idea is to execute /usr/local/bin/my-shell-script.sh at the moment of .tex document processing and inject its output into LaTeX stream. Is it possible at all?

Answer

David Z picture David Z · Jul 15, 2010

I would do something like the following (partially motivated by what Roman suggested): make your LaTeX file be

\documentclass{article}
\begin{document}
\input{scriptoutput.tex}
\end{document}

and generate the file scriptoutput.tex using

/usr/local/bin/my-shell-script.sh > scriptoutput.tex

You could encode this in a makefile if you want to have it run automatically when necessary. Alternatively, you could use the TeX \write18 command,

\documentclass{article}
\immediate\write18{/usr/local/bin/my-shell-script.sh > scriptoutput.tex}
\begin{document}
\input{scriptoutput.tex}
\end{document}

and I think that would automatically run the shell script each time you compile the document. The \immediate is necessary to ensure that the script is run when LaTeX encounters the command, rather than waiting until a page of output is written. (See this question for more on the shipout routine.)