¿Es posible hacer sándwiches de alias?

8

Estoy buscando una manera de hacer que el siguiente alias funcione para cualquier nombre de archivo.

alias dim='cd /home/jason/Documents; vim *the desired file*; cd'

Me pregunto si hay una manera de cambiar este alias para que pueda escribir cualquier nombre de archivo como tal:

dim *the desired file*

Y sigue obteniendo el mismo resultado. Básicamente, ¿hay alguna forma de invocar lo que se escribe después del nombre del alias en el alias mismo? Algo como:

alias dim='cd /home/jason/Documents; vim <what is typed after alias>; cd'
Jason Basanese
fuente
// ¿Cuál fue el propósito de esto?
Nathan Basanese

Respuestas:

8

No, no puede hacerlo utilizando alias de shell. Necesitas usar una función.

Aquí hay una función simple para hacer el trabajo:

dim() {
cd /home/jason/Documents
vim "$1"
cd
}

La función dimtomará un nombre de archivo como argumento. Puede poner este fragmento de código al final de su ~/.bashrcarchivo y luego ejecutarlo como:

dim file.txt

Reemplace file.txtcon cualquier nombre de archivo que desee.

Para ejecutarlo desde la sesión de shell actual, primero sourceel ~/.bashrcarchivo:

. ~/.bashrc
heemayl
fuente
3
¿Qué significa el "$ 1"? Soy un principiante y trato de aprender en lugar de simplemente copiar y pegar y llamarlo un día.
Jason Basanese
1
@JasonBasanese Agradezco su decisión :) $1indica el primer parámetro posicional o argumento de la función ... piense en ello como una forma de dar entrada a una función o script ... como todos los lenguajes de programación bashtambién usa esto ... encontrar numerosos recursos sobre esto en Google ..
heemayl 05 de
3

No con alias, use funciones en su lugar.

Desde la página de manual de Bash :

ALIAS

[...] No existe un mecanismo para utilizar argumentos en el texto de reemplazo. Si se necesitan argumentos, se debe utilizar una función de shell (ver FUNCIONES a continuación).

Entonces su función podría ser:

función dim () {cd ~ jason / Documents; vim $ *; discos compactos - ;}

CijcoSistems
fuente
1
¿No funcionaría bien ~ / Documents en este caso? Además, ¿qué significan los símbolos $ y * en este caso? y es el - después de que se necesita el CD? Por lo general, solo puedo escribir cd y sube un directorio.
Jason Basanese
“Por lo general, solo puedo escribir cd y sube a un directorio”: solo conozco un plano cdpara llevarlo a su directorio de inicio; cd ..sube un nivel cd -lo lleva al directorio anterior desde el cual cdeditó.
Chriki
1
@JasonBasanese: Sí ~ / Documentos funcionaría para todos (si es una función para todos los usuarios). $*es como $1 $2 $3...darle toda la lista a vim, no el primer argumento que escribe. Y como dijo Chriki, cd -volverá al directorio anterior (el que era cuando invocó la función).
CijcoSistems