我有一个可在 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
gives Darwin
对于 OSX 和Linux
对于 Linux,而我的 Cygwin 给出CYGWIN_NT-5.1
。但您可能必须尝试各种不同的版本。
So the bash
执行此类检查的代码将类似于:
unameOut="$(uname -s)"
case "${unameOut}" in
Linux*) machine=Linux;;
Darwin*) machine=Mac;;
CYGWIN*) machine=Cygwin;;
MINGW*) machine=MinGw;;
MSYS_NT*) machine=Git;;
*) machine="UNKNOWN:${unameOut}"
esac
echo ${machine}
请注意,我在这里假设您实际上正在运行withinCygWin(bash
它的外壳)所以路径应该已经正确设置。正如一位评论者指出的那样,您可以运行bash
程序,传递脚本,来自cmd
本身,这可能会导致路径未根据需要设置。
If you are这样做时,您有责任确保调用正确的可执行文件(即 CygWin 可执行文件),可能通过事先修改路径或完全指定可执行文件位置(例如,/c/cygwin/bin/uname
).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)