Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

3 réponses
Avatar
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.

3 réponses

Avatar
Matthieu Moy
mpg writes:

à 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

Avatar
Stephane Chazelas
On Tue, 04 Dec 2007 14:36:25 +0100, Matthieu Moy wrote:
mpg writes:

à 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


Avatar
Thierry PINELLI
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 :)