5 votes

Utilisation de 'alias' dans bash script sous OSX

J'écris quelques scripts et je veux qu'ils fonctionnent sur Linux et Mac. Le problème est que "les implémentations de sed, readlink, zcat, etc. sont différentes sur OS X et Linux".

Alors j'ai essayé CE mais pour moi, la commande alias ne fonctionne pas comme prévu. Voici un simple script 'a' :

$cat a
alias readlink=gredlink
readlink --help

et le résultat ...

$./a
readlink: illegal option -- -
usage: readlink [-n] [file ...]

Quelqu'un peut-il m'expliquer ce qui se cache sous le rideau, et y a-t-il une solution de contournement ?

Utilisation de OSX Yosemite 10.10.5 C'est la même chose avec le bash inclus dans l'OS avec "GNU bash, version 4.3.42(1)-release (x86_64-apple-darwin14.5.0)".

5voto

nohillside Points 82672

Les alias ne sont pas interprétés dans les scripts du shell. De bash(1) :

Aliases are not expanded when the shell is not interactive, unless the expand_aliases
shell option is set using shopt)

Ainsi, le script appelle toujours le standard readlink qui n'est pas au courant de --help .

Au lieu de définir expand_aliases (ce que vous devez vous rappeler de faire sur chaque système et qui peut conduire à des effets secondaires inattendus dans d'autres scripts) je recommanderais d'utiliser plutôt des fonctions :

function my_readlink() {
    greadlink "$@"
}
my_readlink --help

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X