我正在尝试foobar.txt
使用创建一个文本文件\immediate\write18
,但无法弄清楚如何正确获取\n
以便 Unix 将这些行放在新行上。下面的 MWE 在输出文件中生成一行:
\n \n ---------\n Foo:foo \n Foo:foo \n 酒吧:酒吧 \n
我想要的输出文件中有几行空白行,后面跟着:
---------
福:福
酒吧:酒吧
附加问题:
- 这似乎总是附加到文件中,而我认为正常的 Unix 方式是单次
>
覆盖文件,而两次>>
附加到文件。如果文件已经存在,我该如何让它覆盖文件。或者这是禁止这样做的安全功能。
笔记:
- 冒号后面的值不是固定的,而是在编译时构建的。否则,一个简单的
cat
解决方案就可以奏效了。
代码:
\documentclass{article}
\begin{document}
\immediate\write18{%
echo " \string\n" > foobar.txt%
echo " \string\n" >> foobar.txt%
echo "---------\string\n" >> foobar.txt%
echo "Foo: foo \string\n" >> foobar.txt%
echo "Foo: foo \string\n" >> foobar.txt%
echo "Bar: bar \string\n" >> foobar.txt%
}
\end{document}
答案1
只需连接echo
命令:
\documentclass{article}
\begin{document}
\immediate\write18{%
echo "" > foobar.txt;
echo "" >> foobar.txt;
echo "--------" >> foobar.txt;
echo "Foo: foo" >> foobar.txt;
echo "Foo: foo" >> foobar.txt;
echo "Bar: bar" >> foobar.txt
}
\end{document}
如果noclobber
设置了该变量,shell 将拒绝使用输出重定向命令覆盖现有文件。因此,如果在被调用命令 shell 的环境中设置了该变量,则第一个命令echo "" > foobar.txt
将不会成功。
但是使用标准流写入将获得相同的结果:
\newwrite\foobar
\immediate\openout\foobar=foobar.txt
\immediate\write\foobar{}
\immediate\write\foobar{}
\immediate\write\foobar{--------}
\immediate\write\foobar{Foo: foo}
\immediate\write\foobar{Foo: foo}
\immediate\write\foobar{Foo: bar}
\immediate\closeout\foobar