[LUG.ro] Consulta sobre bash
Mariano Street
mctpyt en gmail.com
Lun Sep 30 23:44:57 ART 2013
Hasta donde sé y por lo que estoy probando, en los alias no se pueden
usar parámetros. Simplemente son un pedazo de texto que se reemplaza
por otro literalmente.
Si ponés $1 en un alias, ese $1 se reemplaza antes de que se cree el
alias. Si lo escapás para que no se interprete, ya sea con una barra
invertida (\$1) o encerrando la expresión entera entre comillas
simples en vez de dobles, te queda $1 en la cadena de texto que genera
el uso del alias, y esto después se reemplaza por el valor de la
variable “1” en la sesión del intérprete.[0] O sea, el valor de las
variables depende de la sesión, no de los argumentos que uno ponga al
usar el alias.
Se me ocurren 2 soluciones simples:
* Primero, si bien no hay parámetros, lo que se reemplaza no es la
línea completa que uno pone sino solo la primera palabra de la
misma, que representa el nombre del comando. Por ejemplo, si tenemos
un alias “hola” definido como “echo hola” y ejecutamos “hola mundo”,
el “hola” se reemplaza por “echo hola” pero el “mundo” no se toca,
así que queda la línea “echo hola mundo”:
$ alias hola='echo hola'
$ hola mundo
hola mundo
* La segunda es cambiar el alias por una función:
$ hola ()
> {
> echo "hola $1"
> }
$ hola mundo
hola mundo
En este caso cualquiera de los 2 métodos se podría usar para definir
“terminatorssh”.
[0] Pongo unos ejemplos para que se entienda mejor la diferencia entre
el tipo de comillas:
$ hola=mundo
$ alias a="echo $hola"
$ a
mundo
$ hola=42
$ a
mundo
$ hola=mundo
$ alias a='echo $hola'
$ a
mundo
$ hola=42
$ a
42
(Las líneas que empiezan con $ representan el inicio de líneas de
comando; las que empiezan con >, continuaciones de líneas de comando;
y las demás son salidas del intérprete.)
Saludos,
Mariano
Más información sobre la lista de distribución Lugro