1. Bash脚本判断操作系统
Bash脚本大揭秘:一键识别macOS、Windows还是Linux,让你的跨平台部署更轻松!
致读者: 点击上方 “雪之梦技术驿站” → 点击右上角“ ... ”→ 点选“设为星标 ★ ” 加上星标,就不会找不到我啦!
1.1. 引言
由于工作原因需要在mac
和windos
电脑之间随时切换,为了方便会写一些脚本解放重复性劳动.
类似于这样的上传文件命令就有很强的操作系统路径强相关性,需要区分到底是mac
还是windows
,从而决定不同的上传路径.
# mac
scp -r /Users/snowdreams1006/generator/* ali:~/generator
# windows
scp -r /g/generator/* ali:~/generator
因此,研究一下在bash
环境中判断识别不同的操作系统,在这里分享一下.
1.2. 思路
1.2.1. 1. 检查 uname 命令
第一反应就是使用uname
命令观察在不同操作系统的输出,下面测试了三款操作系统.
uname -s
# Linux
uname -s
# Darwin
uname -s
# MINGW64_NT-10.0-19045
如果是 windows10 原生终端环境power shell
,是不支持uname
命令的,会得到如下报错信息.
顺便科普一下uname
的命令:
总结:
uname
命令在Unix-like
系统(包括macOS 和
Linux`)上可用,但在原生 Windows 命令行中不可用。
通过检查 uname
的输出,可以区分 macOS
和其他 Unix-like
系统.
如果是目前的个人需求足矣判断出 mac 即可,其他情况就是 windows,也可以检查 windows 文件或者特殊的环境变量.
1.2.2. 2. 检查 Windows 特有的环境变量
在我的电脑-高级设置-环境变量-系统环境变量中可以看到很多键值对的环境变量,尽可能挑选出系统自带且特殊的名称.
实测下来只有Windows
会有这些环境变量的值,其他操作系统输出为空,那么就可以判断特殊的环境变量识别出windows
操作系统.
echo $WINDIR
# Linux 输出为空
echo $WINDIR
# Darwin 输出为空
echo $WINDIR
# Windows 输出 C:\Windows
echo $SYSTEMROOT
# Windows 输出 C:\Windows
除此之外还可以检查特定文件的存在性(比如macOS
上的 /System/Library/CoreServices/SystemVersion.plist
或 Windows
上的C:\Windows\System32\cmd.exe
等等.
1.3. 实现
思路: 使用 uname -s
根据输出内容判断macOS
还是Linux
,然后再获取特定的环境变量的值来区分是否是Windows
操作系统.
实现: 脚本如下,亲测有效.
if [ "$(uname -s)" == "Darwin" ]; then
echo "This is macOS."
elif [ "$(uname -s)" == "Linux" ]; then
echo "This is Linux."
elif [ -n "$WINDIR" ] || [ -n "$SYSTEMROOT" ]; then
echo "This is Windows."
else
echo "Unknown Unix-like system."
fi
1.4. 总结
值得注意的是Bash
本质上是为Unix-like
系统设计的,因此在原生 Windows 环境中直接区分操作系统可能需要一些额外的考虑,特别是如果你不是在使用WSL
。
最后提供本人亲测好用的检测代码,可以简单识别出操作系统从而做出不同决策.
1.5. 往期精彩文章
- 终极防窥秘籍!禁用右键+F12,竟还拦不住好奇宝宝?揭秘防窥新境界!
- 网站反爬新招:一键封杀右键菜单,让你的网站数据稳如泰山,打造爆款防护秘籍!
- 男人的魅力密码:价值至上的情感攻略
- 每天一道美味佳肴《糖醋排骨》
1.6. 欢迎扫码关注
欢迎扫码关注,私信回复『加群』一起交流技术
作者: 雪之梦技术驿站
来源: 雪之梦技术驿站
本文原创发布于「雪之梦技术驿站」,转载请注明出处,谢谢合作!