Para el script bash, puedo usar "$@"
para acceder a los argumentos. ¿Cuál es el equivalente cuando uso un alias?
64
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 usted fuera a alias ls
para ls -la
, a continuación, escribiendo ls foo bar
sería realmente ejecutar ls -la foo bar
en la línea de comandos.
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 "$@"
}
sh
están definidasmy_program_wrapper() { ...; }
. Bash maneja la palabra clave,function
pero ¿por qué no ir con lo que es más portátil?Solución de alias
Si realmente está en contra de usar una función per se, puede usar:
Puede reemplazar
$@
con$1
si solo desea 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.La
unset -f
quita la definición de función como el alias se ejecuta de manera que no cuelgue alrededor después.fuente
wrap_args x y z
me da: bash: error de sintaxis cerca de token inesperado `('f
aliasado. Una vez que lo desajustef
, funciona bien. La vieja colisión de nombres.command type f
:)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:
(un ejemplo inspirado en esta pregunta ) esto siempre usará el resultado de
ls -l
realizado en el directorio actual y hará un grep sobre eso, así que usandolsswp / tmp /
sería equivalente a
ls -l | grep swp /tmp/
y nols -l /tmp/ | grep swp
.A todos los efectos, donde los argumentos deben ser utilizados en algún punto intermedio, es necesario utilizar un
function
lugar dealias
.fuente
No tienes que hacer nada, en realidad; los alias hacen esto automáticamente. Por ejemplo:
Verá la primera página de foo.txt y se
less
cerrará en EOF (-e), las búsquedas no distinguen entre mayúsculas y minúsculas (-i), etc.fuente
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:
, dónde
!:1
y cuáles!:2
son los parámetros que proporcionará al llamar a su alias.Ejemplo de uso:
Lo que efectivamente significa que usó dos parámetros que insertó en lugares arbitrarios del comando tar, haciendo de todo un alias
tgz
fuente