你如何在脚本中确定你是在 Linux 还是 BSD 系统上?

Kar*_*aru 11 linux script bsd shell

我有一个相当广泛的 dotfiles 选择,这些文件在 git repo 中保存了最长时间 - 我只是为 bsd-isms 维护一个单独的代码分支(例如,在 Linux 上,为了获得彩色的 ls 输出ls --color=auto,但是在类似 BSD 的系统上,包括 Mac OS,它是ls -g)。

这已经开始变得笨拙,因为我必须进行更改,然后在每次触摸我的 shell 的 rc 文件时合并分支并处理冲突解决方案。解决这个问题的正确方法是删除 git 分支,然后让我的 rc 文件确定它在哪种操作系统上,然后为别名提供适当的插件脚本。

问题是,我不知道该怎么做。

如何从脚本或 shell rc 文件中判断我是在 Linux 还是 BSD 上?

uname从那以后就不会真正起作用了,我必须为那里的各种系统编写一堆逻辑。当我对操作系统底层类型更感兴趣时,Mac 会说 Darwin、FreeBSD 等,因为这会影响我正在处理的特定工具集。对于上面的示例,我使用的是 bsdls还是 GNU ls

Joh*_*sin 15

这堆栈溢出答案尼古拉斯Martyanoff提供了一个完整的解决方案。我调整了它以使用评论中提到的较新的语法。

确定操作系统:

platform='unknown'
unamestr=$(uname)
if [ "$unamestr" = 'Linux' ]; then
   platform='linux'
elif [ "$unamestr" = 'FreeBSD' ]; then
   platform='freebsd'
fi
Run Code Online (Sandbox Code Playgroud)

为 选择正确的标志ls

if [ "$platform" = 'linux' ]; then

   alias ls='ls --color=auto'

elif [ "$platform" = 'freebsd' ]; then

   alias ls='ls -G'

fi
Run Code Online (Sandbox Code Playgroud)