È possibile creare alias sandwhich?


8

Sto cercando un modo per far funzionare il seguente alias per qualsiasi nome di file.

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

Mi chiedo se c'è un modo per cambiare questo alias per farlo in modo da poter digitare qualsiasi nome di file in quanto tale:

dim *the desired file*

E ottieni ancora lo stesso risultato. Fondamentalmente c'è un modo per chiamare tutto ciò che viene digitato dopo il nome alias nello stesso alias? Qualcosa di simile a:

alias dim='cd /home/jason/Documents; vim <what is typed after alias>; cd'

//, qual era lo scopo di questo?
Nathan Basanese,

Risposte:


8

No, non puoi farlo usando gli alias di shell. Devi usare una funzione.

Ecco una semplice funzione per fare il lavoro:

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

La funzione dimprenderà un nome file come argomento. Puoi inserire questo snippet di codice alla fine del ~/.bashrcfile e quindi eseguirlo come:

dim file.txt

Sostituisci file.txtcon qualsiasi nome file desideri.

Per eseguirlo dalla sessione di shell corrente, sourceil ~/.bashrcfile prima:

. ~/.bashrc

3
Cosa significa "$ 1"? Sono un principiante e sto cercando di imparare piuttosto che copiare e incollare e chiamarlo un giorno.
Jason Basanese,

1
@JasonBasanese Apprezzo la tua decisione :) $1indica il primo parametro posizionale o argomento della funzione..pensalo come un modo per dare input a una funzione o uno script .. come tutti i linguaggi di programmazione bashusano anche questo .... trovare numerose risorse al riguardo su Google ..
heemayl

3

Non con gli alias, utilizzare invece le funzioni.

Dalla pagina man di Bash :

ALIAS

[...] Non esiste alcun meccanismo per l'utilizzo degli argomenti nel testo sostitutivo. Se sono necessari argomenti, è necessario utilizzare una funzione shell (vedere FUNZIONI di seguito).

Quindi la tua funzione potrebbe essere:

function dim () {cd ~ jason / Documents; vim $ *; cd -;}


1
In questo caso i documenti ~ non funzionerebbero bene? Inoltre cosa significano i simboli $ e * in questo caso? ed è necessario - dopo il cd? Di solito posso solo digitare cd e va su una directory.
Jason Basanese,

"Di solito posso solo digitare cd e va su una directory" - Conosco solo un piano cdper portarti nella tua home directory; cd ..sale di un livello. cd -ti porta alla directory precedente da cui sei cded.
Chriki,

1
@JasonBasanese: Sì ~ / I documenti funzionerebbero per tutti (se è una funzione per tutti gli utenti). $*è come $1 $2 $3...dare l'intero elenco a Vim, non il primo argomento che digiti. E come ha detto Chriki, cd -tornerà alla directory precedente (quella che eri quando hai invocato la funzione).
CijcoSistems,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.