Usando 'alias' en el script bash en OSX

4

Escribo algunas secuencias de comandos y quiero 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 intenté ESTA , pero para mí el comando alias no funciona como espero. Aquí está el simple guión 'a':

$cat a
alias readlink=gredlink
readlink --help

y el resultado ...

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

¿Alguien podría explicarme qué hay bajo la cortina? ¿Hay alguna solución?

Utilizando OSX Yosemite 10.10.5 Es lo mismo con el bash incluido con el sistema operativo, así como con "GNU bash, versión 4.3.42 (1) -release (x86_64-apple-darwin14.5.0)"

    
pregunta Hristo Trendafilov 26.04.2016 - 08:15

1 respuesta

5

Los alias no se interpretan dentro de los scripts de shell. Desde bash(1) :

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

Por lo tanto, la secuencia de comandos aún llama al readlink estándar que no conoce% --help .

En lugar de configurar expand_aliases (que debe recordar para hacerlo en cada sistema y que puede provocar efectos secundarios inesperados en otros scripts), recomendaría usar funciones en su lugar:

function my_readlink() {
    greadlink "$@"
}
my_readlink --help
    
respondido por el nohillside 26.04.2016 - 08:29

Lea otras preguntas en las etiquetas