似乎使用
\immediate\write18{echo "\string#!/bin/bash (version 1)" > \jobname.command}%
外部的\newcommand
效果很好。但是,我想在 中调用\newcommand
:
\newcommand{\CreateBashScript}{%
\immediate\write18{echo "\string#!/bin/bash (version 2)" > \jobname.command}%
}%
#
但这与(哈希/磅符号)有问题。
笔记:
- 要重现该问题,您需要取消注释定义中的行
\CreateBashScript
。
代码:
\documentclass{article}
\immediate\write18{echo "\string#!/bin/bash (version 1)" > \jobname.command}%
\newcommand{\CreateBashScript}{%
% \immediate\write18{echo "\string#!/bin/bash (version 2)" > \jobname.command}%
}%
\begin{document}
\CreateBashScript
\end{document}
答案1
由于宏在 a 中展开\write
,所以我
\edef\shebang{\string#!/bin/bash}
在序言中,以便您可以使用
\newcommand{\CreateBashScript}{%
\immediate\write18{echo "\shebang" > \jobname.command}%
}
在命令中。
正如评论中所说,您还可以#
在替换文本中将其加倍
\newcommand{\CreateBashScript}{%
\immediate\write18{echo "\string##!/bin/bash" > \jobname.command}%
}
但我认为这\shebang
更清楚。
答案2
我为这个问题奋斗了两天,在理解它的重要性之前,我曾无数次地遇到过这个很棒的答案。因此,我尝试重新表述它,剥离其本质:
如果你想在某个文件中写入文字 #,你可以这样做
\newcommand{\writeouthash}{%
\immediate\write\myfile{\string##}%
}