简介
我有一个魔法'如果我提供IP,可以在机器上执行命令行操作的工具。 该工具知道机器正在使用的操作系统,并根据它是否为windows / linux在cmd / shell上执行命令,并盲目地返回命令的输出。
C:> tool.exe 172.140.56.2" ipconfig"
假设:
问题:
利用这种能够执行命令的能力,我想确定操作系统
我的解决方案:
执行ipconfig命令。如果结果是
-bash:ipconfig:command not found
是linux。
如果它是这样的话:
Windows IP Configuration
Ethernet adapter Local Area Connection:
...
然后是Windows。
问题:
我想知道这是否是一种万无一失的做法。我想要一个在某些情况下不会失败的命令。 (比如安装在Windows上的cygwin允许linux命令成功。或者在一些特殊的scneario下,ipconfig在linux上成功。)
我可以用一些解析器处理命令输出,如果这有任何帮助。
只是为了清除任何困惑。它可以是任何命令。我在我的例子中使用了ipconfig。
答案 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都支持它(尽管csh
和bash
之间的输出有所不同)。 Windows系统的输出中将包含PROCESSOR_ARCHITECTURE
和其他标准变量(请参见https://ss64.com/nt/syntax-variables.html),这在Linux中不太可能设置。