命令将在Windows和Linux上成功,但会产生不同的结果

时间:2014-11-10 17:09:29

标签: linux windows shell cmd

这个问题建立在我提出的上一个问题之上 Determine OS from a single command line operation

当我提供主机名时,我有一个能够在远程系统上执行命令的工具。 远程计算机可以是Windows或Linux。 执行命令后,我应该能够根据命令的结果确定操作系统。

前面提供的解决方案是uname,它在linus操作系统上打印“Linux”并且在Windows上失败。 它在理论上工作得很好,但我遇到的问题是任何命令失败都会导致该工具崩溃,因为在这种情况下Windows会返回非零返回码。

所以为了解决这个问题,我面前有两个选择

  1. 强制Windows命令行返回0作为退出代码,无论如何 实际结果(这必须作为单身的一部分来完成 命令我可以在Windows系统上执行)
  2. 找到一个在两个系统上都会成功的命令(如echo)(但不像echo那样可以帮助我识别操作系统)
  3. 我不确定第一个选项是否可行,但对其中任何一个选项的解决方案都有帮助

2 个答案:

答案 0 :(得分:3)

  

WHOAMI

Linux - 将为您登录的用户提供

Windows - 将提供主机/用户名

答案 1 :(得分:2)

如果你能根据输出作出决定,我still think echo "$PATH"是正确的想法。

由于在Linux上使用shell(bashtcshksh等),在Windows上使用cmd.exepowershell,因此会有很大不同结果

使用linux / etc。 shell你会得到一个路径字符串。

使用cmd.exe,您将获得"$PATH"

使用powershell,您将获得空字符串。

该空字符串结果在技术上对linux / etc有效。因为你可以在那里有一个空路径,但是你可以使用"${PATH:-linux}"代替它,对于$PATH派生的shell中的空(或未设置)sh变量,它将获得你linux并且仍然会从powershell获取一个空字符串(尽管这似乎在csh派生的shell失败了。)