5 votos

El uso de 'alias' en un script de bash en OSX

Escribo algunas secuencias de comandos y quiero hacer que funcione en Linux y Mac. El problema es, que "las Implementaciones de sed, readlink, zcat, etc. son diferentes en OS X y Linux."

Así que traté de ESTE enfoque, pero para mí alias de comando no funciona como esperaba. Aquí es simple script 'a':

$cat a
alias readlink=gredlink
readlink --help

y el resultado ...

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

Podría alguien me explique lo que está debajo de la cortina, y no hay solución?

El uso de OSX Yosemite 10.10.5 Es el mismo con el bash incluye con el sistema operativo, así como con "GNU bash, versión 4.3.42(1) liberación (x86_64-apple-darwin14.5.0)"

5voto

Los alias no son interpretados dentro de secuencias de comandos de shell. De bash(1):

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

De manera que el script llama a la norma readlink que no sabe acerca de la --help.

En lugar de establecer expand_aliases (lo que usted tiene que recordar hacerlo en cada sistema, y que puede conducir a inesperados efectos secundarios en otros scripts) yo recomendaría usar funciones en su lugar:

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

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X