我有一个在 Windows/Cygwin 以及 Mac 和 Linux 上都使用的 shell 脚本。每个版本需要的变量略有不同。
shell/bash 脚本如何检测它是在 Cygwin、Mac 还是 Linux 中运行?
最佳答案
通常,uname
及其各种选项会告诉您正在运行的环境:
pax> uname -a
CYGWIN_NT-5.1 IBM-L3F3936 1.5.25(0.156/4/2) 2008-06-12 19:34 i686 Cygwin
pax> uname -s
CYGWIN_NT-5.1
并且,根据非常有帮助的 schot
(在评论中),uname -s
为 OSX 和 Linux 提供了
用于 Linux,而我的 Cygwin 提供 Darwin
CYGWIN_NT-5.1
。但是您可能必须尝试各种不同的版本。
因此,执行此类检查的 bash
代码如下:
unameOut="$(uname -s)"
case "${unameOut}" in
Linux*) machine=Linux;;
Darwin*) machine=Mac;;
CYGWIN*) machine=Cygwin;;
MINGW*) machine=MinGw;;
*) machine="UNKNOWN:${unameOut}"
esac
echo ${machine}
请注意,我在这里假设您实际上是在 CygWin(它的 bash
shell)中运行,因此应该已经正确设置了路径。正如一位评论者所说,您可以运行 bash
程序,从 cmd
本身传递脚本,这可能会导致路径未按需要设置。
如果您正在这样做,您有责任确保调用正确的可执行文件(即 CygWin 的),可能通过事先修改路径或完全指定可执行文件位置(例如, /c/cygwin/bin/uname
).
关于bash - 如何检查是否在 Cygwin、Mac 或 Linux 中运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3466166/