如何检查ls版本

时间:2009-11-04 20:35:03

标签: shell

这个主题是关于util'ls' BSD版本使用参数'-G'为输出着色, 而Linux版本使用参数'--color'

设置颜色的环境变量也是不同的: BSD:$ LSCOLORS Linux:$ LS_COLORS

但现在的问题是:我想确定安装了哪个版本(使用一个小的Shell脚本),所以我可以在我的.bachrc文件中设置别名ls和环境。

4 个答案:

答案 0 :(得分:6)

正如我上面提到的,这似乎是我最方便的方法

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输出,因为我喜欢

答案 1 :(得分:4)

只需运行'ls'并查看是否会抛出错误,例如在我的Mac上:

$ ls --color 1>/dev/null 2>&1
$ echo $?
1

尽管

$ ls -G 1>/dev/null 2>&1
$ echo $?
0

表示支持-G,但是--color不支持。

答案 2 :(得分:1)

$ 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.

答案 3 :(得分:1)

具有讽刺意味的是,大多数BSD系统都不支持--version切换Kimmo提及:-)

为您的特定设置编写可移植配置文件可能是一项艰巨的任务。在您的情况下,如果您确定您的.bashrc将仅在GNU / Linux和BSD系统上使用,您可以检查存在于其中一个ls中但不在另一个中的交换机:例如, -D似乎不是我的BSD机器(FreeBSD和Mac OS X)上的ls接受的转换,而是GNU ls。相反,-P在BSD上被接受,但在GNU / Linux上不被接受。知道这一点,你就可以区分两个ls'并相应地设置环境变量。