【发布时间】:2009-11-04 20:35:02
【问题描述】:
本主题是关于 util 'ls' BSD 版本使用参数 '-G' 为输出着色, 而Linux版本使用参数'--color'
另外设置颜色的环境变量也不同: BSD:$LSCOLORS Linux:$LS_COLORS
但现在的问题是:我想确定安装的是哪个版本(使用一个小的 Shell 脚本),所以我可以在我的 .bachrc 文件中设置别名 ls 和适当的环境。
【问题讨论】:
标签: shell
本主题是关于 util 'ls' BSD 版本使用参数 '-G' 为输出着色, 而Linux版本使用参数'--color'
另外设置颜色的环境变量也不同: BSD:$LSCOLORS Linux:$LS_COLORS
但现在的问题是:我想确定安装的是哪个版本(使用一个小的 Shell 脚本),所以我可以在我的 .bachrc 文件中设置别名 ls 和适当的环境。
【问题讨论】:
标签: shell
正如我上面提到的,这在我看来是最方便的方法
if ls --color -d . >/dev/null 2>&1; then
GNU_LS=1
elif ls -G -d . >/dev/null 2>&1; then
BSD_LS=1
else
SOLARIS_LS=1
fi
我的 l script 中基本上有这个,我在各种平台上使用它来调整 ls 输出,因为我喜欢
【讨论】:
只需运行 'ls' 并查看它是否会引发错误,例如在我的 Mac 上:
$ ls --color 1>/dev/null 2>&1
$ echo $?
1
而
$ ls -G 1>/dev/null 2>&1
$ echo $?
0
支持-G,但不支持--color。
【讨论】:
&>/dev/null 重定向到黑洞。
具有讽刺意味的是,大多数 BSD 系统不支持 --version 开关 Kimmo 提到的 :-)
为您的特定设置编写可移植的配置文件可能是一项艰巨的任务。在您的情况下,如果您确定您的 .bashrc 将仅在 GNU/Linux 和 BSD 系统上使用,您可以检查 ls' 之一中存在但另一个中不存在的开关:例如, -D 在我的 BSD 机器(FreeBSD 和 Mac OS X)上似乎不是 ls 接受的开关,而它适用于 GNU ls。相反,-P 在 BSD 上被接受,但在 GNU/Linux 上不被接受。知道了这一点,就可以区分这两个ls',并相应地设置环境变量了。
【讨论】:
$ ls --version
ls (GNU coreutils) 6.10
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by Richard Stallman and David MacKenzie.
【讨论】:
strings | grep version。