Shell LaTeX:我在哪个操作系统上运行?

Shell LaTeX:我在哪个操作系统上运行?,shell,latex,Shell,Latex,我正在编写一个LaTeX包,它需要使用\write18。我发出的一些shell命令是特定于系统的(例如,rm与del)。有没有办法确定我在哪个系统上运行 这足以消除Windows和其他(类Unix)系统之间的歧义。不是很好,但它对我很有用 \newread\checkf \immediate\openin\checkf = C:/WINDOWS/win.ini \ifeof\checkf not windows \else windows\fi \closein\checkf 如果你可以用一个

我正在编写一个LaTeX包,它需要使用
\write18
。我发出的一些shell命令是特定于系统的(例如,
rm
del
)。有没有办法确定我在哪个系统上运行


这足以消除Windows和其他(类Unix)系统之间的歧义。

不是很好,但它对我很有用

\newread\checkf
\immediate\openin\checkf = C:/WINDOWS/win.ini
\ifeof\checkf not windows \else windows\fi
\closein\checkf

如果你可以用一个文件标记你的操作系统,你可以这样做

\IfFileExists{/etc/motd}{unix code here}{windows code here}

路径没有什么特别的
/etc/motd
;它只可能在Unix系统上找到,在Windows系统上不太可能找到。如果你想完全确定,你应该创建一个文件专门用来标记系统,不管你想用什么方式来识别它。

我的一个朋友有以下想法,我现在正在使用。我只在WindowsXP和OSX上测试过它,在那里它工作得很好。诚然,在测试上有点脆弱,但在原则上,它几乎在任何其他地方都可以正常工作

\newif\ifwindows

\immediate\write18{echo $SHELL > \jobname.os}
\newread\@whichos
\immediate\openin\@whichos\jobname.os
\read\@whichos to \@whichosshell
\ifthenelse{\equal{\@whichosshell}{$SHELL }}
 {\windowstrue}
 {\windowsfalse}
\closein\@whichos

\ifwindows
  \typeout{System detected: Windows}
  \newcommand\DeleteFile[1]{\immediate\write18{del #1}}
\else
  \typeout{System detected: Unix-like}
  \newcommand\DeleteFile[1]{\immediate\write18{rm #1}}
\fi
% Cleanup.
\DeleteFile{\jobname.os}

这里的关键是Windows不会扩展
$SHELL
环境变量(实际上任何其他变量都可以),因此它会将字符串
$SHELL
逐字写入文件。

看看LaTeX ifplatform包。关于各种平台上的可靠方法进行了大量讨论,目前的版本运行得非常好。

这个想法与Alexey的类似,非常好。但我对系统没有控制权,是的,我更愿意非常肯定,因为这将在一个公开分发的包中。;-)美好的对于Unix系统,它将
\IfFileExists
/dev/null
一起使用;对于Windows系统,它将
num:
一起使用。如果出了问题,还有一大堆古怪的退路+1.