2009-11-04 99 views
4

这话题是关于UTIL“LS” 的BSD版本使用的参数“-G”,而Linux版本中使用参数“--color”如何检查LS版本

到色达的输出,

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

但是现在的问题是:我想确定安装的版本(用一个小的shell脚本),所以我可以在我的.bachrc文件中设置适当的alias ls和环境。

回答

5

正如我上面提到的这对我来说是最方便的方法

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

的MacOSX附带的版本不支持'--version',虽然 – 2009-11-04 20:43:01

+0

版本的缺乏也会告诉你一些东西。我目前无法访问我的Mac OSX盒,但可以尝试使用'strings |' grep版本“,如果你不能使用'ls --version'。 – 2009-11-04 20:45:03

1

讽刺的是,--version开关的Kimmo提到不支持大多数BSD系统:-)

写作特定的设置便携式配置文件可以是一个艰巨的任务。在你的情况下,如果你确定你的.bashrc只会用在GNU/Linux和BSD系统上,你可以检查其中一个ls而不是另一个中存在的交换机:例如, -D在我的BSD机器(FreeBSD和Mac OS X)上似乎并不是ls所接受的开关,而它是用于GNU ls的。相反,在BSD上接受-P,但不在GNU/Linux上。知道这一点,你可以区分两个ls并相应地设置环境变量。

4

只需运行'ls'并查看它是否会引发错误(例如,在我的Mac:支持

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

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

指示-G,但--color不是。

+2

ls --color -d。 >/dev/null 2>&1 && gnu_ls = 1 || bsd_ls = 1 – pixelbeat 2009-11-05 13:49:00

+1

也许是一个愚蠢的说法,但是当当前目录包含很多很多文件时,这不会导致很多开销?或者它在哪里选项'-d'用于? – To1ne 2009-11-05 19:15:28

+1

@ To1ne - 不笨,好电话。你可以插入一个合适的参数 - 也许是根目录? - 将会被发现,并且不可能充满许多文件。或者你可以创建一个临时文件并明确指出(然后删除它)。或者你可以使用/ dev/null作为arg。同意某事应该在那里,而不是一无所获。 – 2009-11-05 23:10:56