2010-12-14 17 views
79

que quieren crear un alias en bash así:Alias ​​con variables en bash

alias tail_ls="ls -l $1 | tail" 

Por lo tanto, si alguien escribe:

tail_ls /etc/ 

sólo mostrará los últimos 10 archivos en el directorio .

Pero $1 parece no funcionar para mí. ¿Hay alguna manera de que pueda introducir variables en bash?

+1

parámetros de soporte de csh y tcsh como '$ 1' en alias; Bash no. –

Respuesta

129

que crearía una función para la que, en lugar de alias, y luego exportado, así:

function tail_ls { ls -l "$1" | tail; } 

export -f tail_ls 

Nota -f interruptor para export: se le dice que va a exportar Una función. Pon esto en tu .bashrc y listo.

+4

Por lo general, no es necesario exportar una función. –

+3

@Dennis, sí, tienes razón, para un alias simple que no será necesario, pero está allí solo en caso de que quieras usarlo en algún shell/proceso derivado. –

+13

En bash necesitas poner un punto y coma ';' antes del padre de cierre '}' al colapsar una función en una línea en línea. 'function tail_ls {ls -l" $ 1 "| tail} 'no funciona sin una terminación como' tail; } ' –

1

tail_ls() { ls -l "$1" | tail; }

+1

Corrija el error de sintaxis (falta ';' before '}') y haga una comilla doble '$ 1' para que también sea compatible con nombres de archivos con espacios en blanco incrustados y otros metacaracteres del shell. – mklement0

28

La solución de Maxim @-sloyko no funcionaba, pero si el siguiente:

  1. En ~/.bashrc añadir:

    sendpic() { scp "[email protected]" [email protected]:/www/misc/Pictures/; } 
    
  2. Guarde el archivo y vuelva a cargar

    $ source ~/.bashrc 
    
  3. y ejecutar:

    $ sendpic filename.jpg 
    

fuente original: http://www.linuxhowtos.org/Tips%20and%20Tricks/command_aliases.htm

+2

@fedorqui gracias por su ayuda. – jruzafa

+0

funcionó como el encanto –

+0

@jruzafa, en cuyo contexto, afirmas que 'La solución de maxim-sloyko funciona no funcionó' mientras que su solución funcionó para mí. –

1

Si está utilizando el shell de pescado (de http://fishshell.com) en lugar de bash, que escribir funciones de manera un poco diferente.

usted querrá añadir algo como esto a su ~/.config/fish/config.fish que es el equivalente de su ~/.bashrc

function tail_ls 
    ls -l $1 | tail 
end 
7
alias tail_ls='_tail_ls() { ls -l "$1" | tail ;}; _tail_ls' 
+0

Ese es un enfoque creativo. Definitivamente resuelve el problema si ** necesitan ** para usar un alias en lugar de una función ... Creo que preferiría una función si esas son una opción, pero una solución muy clara a tener en cuenta para cuando surja la situación correcta ! – lagweezle

1

Puede definir $1 con set, a continuación, utilizar su alias como se pretendía:

$ alias tail_ls='ls -l "$1" | tail' 
$ set mydir 
$ tail_ls