這話題是關於UTIL「LS」 的BSD版本使用的參數「-G」,而Linux版本中使用參數「--color」如何檢查LS版本
到色達的輸出,而且環境變量設置的顏色是不同的: BSD:$ LSCOLORS 的Linux:$ LS_COLORS
但是現在的問題是:我想確定安裝的版本(用一個小的shell腳本),所以我可以在我的.bachrc文件中設置適當的alias ls和環境。
這話題是關於UTIL「LS」 的BSD版本使用的參數「-G」,而Linux版本中使用參數「--color」如何檢查LS版本
到色達的輸出,而且環境變量設置的顏色是不同的: BSD:$ LSCOLORS 的Linux:$ LS_COLORS
但是現在的問題是:我想確定安裝的版本(用一個小的shell腳本),所以我可以在我的.bachrc文件中設置適當的alias ls和環境。
正如我上面提到的這對我來說是最方便的方法
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 --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.
諷刺的是,--version
開關的Kimmo提到不支持大多數BSD系統:-)
寫作特定的設置便攜式配置文件可以是一個艱鉅的任務。在你的情況下,如果你確定你的.bashrc只會用在GNU/Linux和BSD系統上,你可以檢查其中一個ls而不是另一箇中存在的交換機:例如, -D
在我的BSD機器(FreeBSD和Mac OS X)上似乎並不是ls所接受的開關,而它是用於GNU ls的。相反,在BSD上接受-P
,但不在GNU/Linux上。知道這一點,你可以區分兩個ls並相應地設置環境變量。
只需運行'ls'並查看它是否會引發錯誤(例如,在我的Mac:支持
$ ls --color 1>/dev/null 2>&1
$ echo $?
1
而
$ ls -G 1>/dev/null 2>&1
$ echo $?
0
指示-G,但--color不是。
ls --color -d。 >/dev/null 2>&1 && gnu_ls = 1 || bsd_ls = 1 – pixelbeat 2009-11-05 13:49:00
也許是一個愚蠢的說法,但是噹噹前目錄包含很多很多文件時,這不會導致很多開銷?或者它在哪裏選項'-d'用於? – To1ne 2009-11-05 19:15:28
@ To1ne - 不笨,好電話。你可以插入一個合適的參數 - 也許是根目錄? - 將會被發現,並且不可能充滿許多文件。或者你可以創建一個臨時文件並明確指出(然後刪除它)。或者你可以使用/ dev/null作爲arg。同意某事應該在那裏,而不是一無所獲。 – 2009-11-05 23:10:56
的MacOSX附帶的版本不支持'--version',雖然 – 2009-11-04 20:43:01
版本的缺乏也會告訴你一些東西。我目前無法訪問我的Mac OSX盒,但可以嘗試使用'strings |' grep版本「,如果你不能使用'ls --version'。 – 2009-11-04 20:45:03