adapter ses alias à la machine (GNU ls ou pas)

Le
mpg
Bonjour,

à la fac, nous avons accès à plusieurs machines (serveurs d'applications, de
calcul, sas) sur lesquelles nous avons le même home, donc les même
fichiers de configurations, même bien sûr pas les même logiciels.

Certaines machines (linux) ont une version GNU de ls, d'autres (BSD) pas.
Sur la plupart des machines, j'ai l'habitude d'avoir un alias
ls='ls --color=auto'. Cependant, cela couine un peu sur les machines dont
la version de ls n'implémente pas cette option, et je suis obligé de taper
unalias ls à la main à chaque fois avant de pouvoir bosser.

Quel est le moyen propre de gérer ce genre de chose ? J'ai bien pensé à
essayer de tester la version de ls, mais ls --version ne marche qu'avec la
version GNU, et je n'ai pas trouvé d'option correspondante dans le man de
la version BSD. Sinon, j'envisage de tester le nom de la machine (il n'y a
que deux machines BSD auxquelles nous avons accès), mais ça me paraît moins
satisfaisant.

Merci d'avance.

Manuel.
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Matthieu Moy
Le #122034
mpg
à la fac, nous avons accès à plusieurs machines (serveurs d'applications, de
calcul, sas...) sur lesquelles nous avons le même home, donc les même
fichiers de configurations, même bien sûr pas les même logiciels.


Tu peux faire un

if [ $(hostname) = "machin" ]; then
alias ...
fi

Mais pour le cas particulier de ls,

if ls --version | grep -q GNU; then
alias
fi

devrait faire l'affaire (si ls --version échoue, grep ne va pas
reconnaitre GNU dans sa sortie, donc, on a bon).

--
Matthieu

Stephane Chazelas
Le #122033
On Tue, 04 Dec 2007 14:36:25 +0100, Matthieu Moy wrote:
mpg
à la fac, nous avons accès à plusieurs machines (serveurs d'applications, de
calcul, sas...) sur lesquelles nous avons le même home, donc les même
fichiers de configurations, même bien sûr pas les même logiciels.


Tu peux faire un

if [ $(hostname) = "machin" ]; then
alias ...
fi


Les quotes sont au mauvais endroit, tu confonds avec d'autres
languages ou "..." est utiliser pour des chaines de type string.
En shell, tout est string et "..." sert a empecher certaines
expansions du shell pas a indiquer ou specifier le type.

if [ "$(hostname)" = machin ]; then...

ou

case $(uname -n) in
(machin) alias ...
esac

ou

case $(uname) in
Linux) alias...
esac

Mais pour le cas particulier de ls,

if ls --version | grep -q GNU; then
alias
fi

devrait faire l'affaire (si ls --version échoue, grep ne va pas
reconnaitre GNU dans sa sortie, donc, on a bon).


Mais affichera un message d'erreur.

if ls --version -d 2>&1 | grep -q GNU; then
alias...
fi

Avec zsh, tu peux aussi faire:

if grep -q coreutils =ls; then
alias ...
fi

--
Stephane


Thierry PINELLI
Le #122026
mpg wrote:

Quel est le moyen propre de gérer ce genre de chose ? J'ai bien pensé à
essayer de tester la version de ls, mais ls --version ne marche qu'avec la
version GNU, et je n'ai pas trouvé d'option correspondante dans le man de
la version BSD. Sinon, j'envisage de tester le nom de la machine (il n'y a
que deux machines BSD auxquelles nous avons accès), mais ça me paraît moins
satisfaisant.


Installer les coreutils sur le BSD ?

ensuite alias ls=gls ou un truc de ce style.

je ne peux pas essayer sur mon NetBSD à cause d'un conflit entre gwc
(GNU wc) et un autre paquet contenant un gwc homonyme :)

Publicité
Poster une réponse
Anonyme