2009-11-04 7 views
4

Ce sujet est au sujet de la util 'ls La version BSD utilise le paramètre « -G » pour colorer la sortie, tandis que la version Linux utilise le paramètre « --color »Comment vérifier la version ls

également la variable d'environnement pour définir les couleurs est différent: BSD: $ LSCOLORS Linux: $ LS_COLORS

Mais le problème est: Je veux déterminer quelle version est installée (en utilisant un petit script Shell), donc je peut définir alias ls et l'environnement approprié dans mon fichier .bachrc.

Répondre

5

Comme je l'ai mentionné ci-dessus cela me semble être la méthode plus pratique

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 

J'ai essentiellement dans mon l script, que j'utilise sur différentes plates-formes pour modifier la sortie ls comme j'aime

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

Le La version fournie avec MacOSX ne supporte pas '--version' si –

+0

L'absence d'une version vous dira quelque chose aussi. Je n'ai pas accès à ma boîte Mac OSX pour le moment mais vous pouvez essayer une chaîne | grep version' si vous ne pouvez pas l'obtenir en utilisant 'ls --version'. –

1

Ironie du sort, le commutateur --version Kimmo mentionne ne sont pas pris en charge sur la plupart des systèmes BSD :-)

L'écriture d'un fichier de configuration portable pour votre configuration particulière peut être une tâche herculéenne. Dans votre cas, si vous êtes sûr que votre .bashrc ne sera utilisé que sur GNU/Linux et sur un système BSD, vous pouvez vérifier les commutateurs qui existent dans l'un des LS mais pas dans l'autre: par exemple, -D ne semble pas être un changement accepté par ls sur mes machines BSD (FreeBSD et Mac OS X), alors que c'est pour GNU ls. Inversement, -P est accepté sur BSD, mais pas sur GNU/Linux. Sachant cela, vous pouvez faire la distinction entre les deux l et configurer les variables d'environnement en conséquence.

4

Exécutez simplement 'ls' et voyez s'il génère une erreur, par ex. sur mon mac:

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

Alors que

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

Indiquant -G est pris en charge, mais --color n'est pas.

+2

ls --color -d. >/dev/null 2> & 1 && gnu_ls = 1 || bsd_ls = 1 – pixelbeat

+1

Peut-être une remarque stupide, mais cela ne cause-t-il pas beaucoup de surcharge lorsque le répertoire courant contient beaucoup, beaucoup de fichiers? Ou c'est là que l'option '-d' est pour? – To1ne

+1

@ To1ne - pas stupide, bon appel. Vous pouvez insérer un argument approprié - peut-être le répertoire racine? - Ce sera trouvé, et il est peu probable qu'il soit rempli de nombreux fichiers. Ou vous pouvez créer un fichier temporaire et explicitement ls cela (puis l'enlever). Ou vous pouvez utiliser/dev/null comme argument. Convenir que quelque chose devrait être là, plutôt que rien. –

Questions connexes