2009-11-04 97 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