Para el script bash, puedo usar "[email protected]"
para acceder a los argumentos. ¿Cuál es el equivalente cuando uso un alias?
Los alias son como comandos en el sentido de que todos los argumentos a ellos se pasan como argumentos al programa alias. Por ejemplo, si fuera alias ls
a ls -la
, luego escribiendo ls foo bar
would realmente ejecutar ls -la foo bar
en la línea de comando.
Si desea tener un control real sobre cómo se interpretan los argumentos, puede escribir una función como esta:
my_program_wrapper() {
local first_arg="$1" \
second_arg="$2"
shift 2 # get rid of the first two arguments
# ...
/path/to/my_program "[email protected]"
}
solución de alias
Si realmente está en contra de usar una función per se, puede usar:
$ alias wrap_args='f(){ echo before "[email protected]" after; unset -f f; }; f'
$ wrap_args x y z
before x y z after
Puedes reemplazar [email protected]
con $1
si solo quieres el primer argumento.
Explicación
Esto crea una función temporal f
, a la que se le pasan los argumentos.
Los argumentos de alias solo se pasan al final. Tenga en cuenta que f
se llama al final del alias.
Los unset -f
elimina la definición de la función a medida que se ejecuta el alias para que no se cuelgue después.
Además de las respuestas actuales, una cosa importante a tener en cuenta sobre cómo funcionan los alias es que todos los parámetros que escriba después de un comando con alias se usarán literalmente al final. Por lo tanto, no hay forma de usar alias para dos comandos (canalizados o no), de los cuales el primero debe interpretar los parámetros. Para que quede claro, aquí hay un ejemplo de algo que no funcionaría como se esperaba:
alias lsswp="ls -l | grep swp"
(un ejemplo inspirado por esta pregunta ) esto siempre usará la salida de ls -l
realizado en el directorio ¡actual y hacer un grep sobre eso, así que usando
lsswp/tmp /
sería equivalente a ls -l | grep swp /tmp/
y no ls -l /tmp/ | grep swp
.
Para todos los propósitos donde los argumentos deben usarse en algún lugar en el medio, uno necesita usar un function
en lugar de alias
.
No tienes que hacer nada, en realidad; los alias hacen esto automáticamente. Por ejemplo:
$ alias less="less -eirqM"
$ less foo.txt
Verá la primera página de foo.txt y less
se cerrará en EOF (-e), las búsquedas no distinguen entre mayúsculas y minúsculas (-i), etc.
Estoy respondiendo por csh:
Sí, puede usar los parámetros en alias y, como diferencia con lo que se ha dicho anteriormente, puede referirse a ellos en cualquier lugar de la definición de alias, no solo al final.
Ejemplo para tar-gz -ing algo:
$ alias tgz "tar cvf - \!:1 | gzip -9 > \!:2.tar.gz"
, dónde !:1
y !:2
son los parámetros que proporcionará cuando llame a su alias.
Ejemplo de uso:
$ ls
clrcf.dat user_comment_2016.06.03_12:51:50.txt user_comment_2016.06.03_12:54:48.txt
TEST-wADM.tec user_comment_2016.06.03_12:52:04.txt user_comment_2016.06.03_12:55:13.txt
$ tgz user* out
a user_comment_2016.06.03_12:51:50.txt 1K
a user_comment_2016.06.03_12:52:04.txt 1K
a user_comment_2016.06.03_12:54:48.txt 1K
a user_comment_2016.06.03_12:55:13.txt 1K
$ ls out*
out.tar.gz
Lo que significa que usó dos parámetros que insertó en lugares arbitrarios del comando tar, convirtiéndolo en un alias tgz