Quiero saber si puedo pasar una discusión con un comando de alias.
por ejemplo:
alias d="dmesg|grep -iw usb|tail -5"
Ahora d
imprimirá las últimas 5 líneas. Si quiero usar d para imprimir un número diferente de líneas, tengo que hacer cambios en la declaración del comando alias de d
nuevo.
¿Hay alguna manera de modificar la declaración de un alias para no tener que volver a escribir la declaración para cambiar el número de líneas? ¿Como incorporar pasar el número de líneas como argumento al declarar alias para d
? ¿O hay algún otro método para resolver esto?
command-line
bash
alias
srk_cb
fuente
fuente
Respuestas:
Los alias no toman argumentos. Con un alias como
alias foo='bar $1'
, el$1
shell expandirá el primer argumento del shell (que probablemente no sea nada) cuando se ejecute el alias.Entonces: use funciones , en su lugar.
num=${1:-5}
usa el primer argumento, con un valor predeterminado de 5 si no se proporciona.Entonces puedes hacer:
O, si cambia las opciones que usó ligeramente:
Luego puede pasar
-n
opciones adicionales :Si
-n
se especifican varias opciones paratail
, solo se usa la última.fuente
~/.bashrc
orc.local
o donde sea?Debe tener una función para esto como se describe en el SO y aquí . Intenta lo siguiente:
y llame al
foo
con:fuente
Solución de limitaciones de alias con comando de grupo y here-string
Los alias no pueden tomar argumentos, pero podemos "simular" eso. Tomemos, por ejemplo, un ejemplo de mi respuesta a esta pregunta .
Puntos clave que están sucediendo aquí:
read
incorporado para leer una cadena en una variabled
. Debido a que queremos leer una cadena completa que incluya caracteres en blanco (líneas nuevas, pestañas, espacios), utilizamosIFS=
y deshabilitamos los escapes de barra invertida-r
.<<<
que es operador de cadena aquí nos permite redirigir cualquier cadena que proporcionemos como argumento almkcd
alias; el uso sería comomkcd "some directory"
{ list; }
estructura (que se conoce comogroup command
en elbash
manual) Tenga en cuenta que se requieren espacios iniciales después{
y;
una lista individual de comandos.En su ejemplo específico podríamos hacer:
También podríamos hacer uso de la división de palabras para almacenar argumentos separados por espacios:
O podríamos usar matrices para proporcionar múltiples argumentos:
¿Pero es este buen enfoque?
No necesariamente. El problema con este enfoque es que es muy específico: los argumentos no se pueden citar fácilmente, lo que significa que solo podemos tener argumentos sin espacios.
Por supuesto, esto no es algo que se usaría ampliamente, simplemente porque en el mundo real tenemos que lidiar con argumentos complejos, por lo que este enfoque no es muy práctico. Las funciones son mucho más flexibles. Y la necesidad de citar una cadena de args se vuelve molesta rápidamente.
A pesar de las limitaciones, esto funciona con cadenas simples como argumentos donde podemos permitirnos la división de palabras, por lo que en parte nos permite dar argumentos a los alias.
fuente