如何更改 \write18 使用的 shell?

如何更改 \write18 使用的 shell?

我在 macOS 上(Ubuntu 上也是一样)。这是我的默认/当前 shell:

$ ps -p $$
  PID TTY           TIME CMD
 5835 ttys002    0:00.13 -bash

然后,这是我的文件foo.tex

\documentclass{article}
\begin{document}
\immediate\write18{ps -p $$ > stdout}
\end{document}

我正在编译它,然后检查输出:

$ pdflatex --shell-escape foo.tex && cat stdout
...
PID TTY           TIME CMD
 6876 ttys002    0:00.00 sh -c ps -p $$ > stdout

如您所见,shell 是sh,而不是bash。如何修复此问题?我需要bash由 执行\write18

答案1

您可以将 bash 作为命令的一部分调用,例如


\immediate\write18{bash -c 'echo \ current shell is: $0'}
\bye

产生终端输出

$ pdftex --shell-escape file
This is pdfTeX, Version 3.141592653-2.6-1.40.25 (TeX Live 2023) (preloaded format=pdftex)
 \write18 enabled.
entering extended mode
(./file.tex current shell is: bash
 )
No pages of output.
Transcript written on file.log.

与之比较

\immediate\write18{echo \ current shell is: $0}
\bye

显示 sh 为 shell

$ pdftex --shell-escape file
This is pdfTeX, Version 3.141592653-2.6-1.40.25 (TeX Live 2023) (preloaded format=pdftex)
 \write18 enabled.
entering extended mode
(./file.tex current shell is: sh
 )
No pages of output.
Transcript written on file.log.

相关内容