从单个命令行操作确定操作系统

时间:2014-10-22 19:18:10

标签: linux windows shell cmd

简介

我有一个魔法'如果我提供IP,可以在机器上执行命令行操作的工具。 该工具知道机器正在使用的操作系统,并根据它是否为windows / linux在cmd / shell上执行命令,并盲目地返回命令的输出。

  

C:> tool.exe 172.140.56.2" ipconfig"

假设:

  1. 每台机器一个操作系统。工具执行命令没有问题(是否失败是一个不同的问题)
  2. 操作系统始终是Windows或Linux。
  3. 我根据命令结果确定操作系统
  4. 问题:

    利用这种能够执行命令的能力,我想确定操作系统

    我的解决方案:

    执行ipconfig命令。如果结果是

      

    -bash:ipconfig:command not found

    是linux。

    如果它是这样的话:

    Windows IP Configuration
    Ethernet adapter Local Area Connection:
    ...
    

    然后是Windows。

    问题:

    我想知道这是否是一种万无一失的做法。我想要一个在某些情况下不会失败的命令。 (比如安装在Windows上的cygwin允许linux命令成功。或者在一些特殊的scneario下,ipconfig在linux上成功。)

    我可以用一些解析器处理命令输出,如果这有任何帮助。

    只是为了清除任何困惑。它可以是任何命令。我在我的例子中使用了ipconfig。

3 个答案:

答案 0 :(得分:1)

如果我理解你的问题,那么uname就是理想的命令。如果它是任何Unix系统(包括OSX),它将返回正确的变量,如果它是Windows,它将返回未找到或类似的命令。

答案 1 :(得分:1)

确定Linux /版本最安全的方法是

cat /etc/*release

示例输出。

DISTRIB_ID=LinuxMint
DISTRIB_RELEASE=17
DISTRIB_CODENAME=qiana
DISTRIB_DESCRIPTION="Linux Mint 17 Qiana"
NAME="Ubuntu"
VERSION="14.04.1 LTS, Trusty Tahr"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 14.04.1 LTS"
VERSION_ID="14.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"

答案 2 :(得分:0)

另一个有效的命令是set,它显示每个环境变量的名称和值。 Linux上的任何shell都支持它(尽管cshbash之间的输出有所不同)。 Windows系统的输出中将包含PROCESSOR_ARCHITECTURE和其他标准变量(请参见https://ss64.com/nt/syntax-variables.html),这在Linux中不太可能设置。