[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