我在 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.