Ist es möglich, Sandwiches zu erstellen?

8

Ich suche nach einer Möglichkeit, den folgenden Alias ​​für jeden Dateinamen zu verwenden.

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

Ich frage mich, ob es eine Möglichkeit gibt, diesen Alias ​​so zu ändern, dass ich einen beliebigen Dateinamen als solchen eingeben kann:

dim *the desired file*

Und trotzdem das gleiche Ergebnis erzielen. Grundsätzlich gibt es eine Möglichkeit, alles, was nach dem Aliasnamen eingegeben wird, in den Alias ​​selbst aufzurufen? Etwas wie:

alias dim='cd /home/jason/Documents; vim <what is typed after alias>; cd'
Jason Basanese
quelle
//, was war der Zweck davon?
Nathan Basanese

Antworten:

8

Nein, das können Sie nicht mit Shell-Aliasen tun. Sie müssen eine Funktion verwenden.

Hier ist eine einfache Funktion, um die Arbeit zu erledigen:

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

Die Funktion verwendet dimeinen Dateinamen als Argument. Sie können dieses Code-Snippet am Ende Ihrer ~/.bashrcDatei einfügen und dann wie folgt ausführen:

dim file.txt

Ersetzen Sie file.txtdurch einen beliebigen Dateinamen.

Um es von der aktuellen Shell-Sitzung aus auszuführen, muss sourcedie ~/.bashrcDatei zuerst:

. ~/.bashrc
heemayl
quelle
3
Was bedeutet "$ 1"? Ich bin ein Anfänger und versuche zu lernen, anstatt nur zu kopieren, einzufügen und es einen Tag zu nennen.
Jason Basanese
1
@JasonBasanese Ich schätze Ihre Entscheidung :) $1gibt den ersten Positionsparameter oder das erste Argument für die Funktion an. Denken Sie daran, um eine Funktion oder ein Skript einzugeben. Wie alle Programmiersprachen wird bashauch dies verwendet Finden Sie zahlreiche Ressourcen dazu auf Google ..
Heemayl
3

Verwenden Sie stattdessen keine Aliase, sondern Funktionen.

Von der Bash-Manpage :

ALIASEN

[...] Es gibt keinen Mechanismus für die Verwendung von Argumenten im Ersatztext. Wenn Argumente benötigt werden, sollte eine Shell-Funktion verwendet werden (siehe FUNKTIONEN unten).

Ihre Funktion könnte also sein:

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

CijcoSistems
quelle
1
Würden ~ / Dokumente in diesem Fall nicht gut funktionieren? Was bedeuten die Symbole $ und * in diesem Fall? und wird das - nach der cd benötigt? Normalerweise kann ich einfach cd eingeben und es geht in ein Verzeichnis.
Jason Basanese
"Normalerweise kann ich einfach cd eingeben und es geht in ein Verzeichnis" - Ich kenne nur eine Ebene cd, um Sie in Ihr Home-Verzeichnis zu bringen; cd ..geht eine Ebene höher. cd -bringt Sie zum vorherigen Verzeichnis, aus dem Sie herausgearbeitet haben cd.
Chriki
1
@JasonBasanese: Ja ~ / Dokumente würden für alle funktionieren (wenn es eine Funktion für alle Benutzer ist). $*ist wie $1 $2 $3...nur die ganze Liste an vim zu geben, nicht das erste Argument, das Sie eingeben. Und wie Chriki sagte, cd -wird zum vorherigen Verzeichnis zurückkehren (dem, das Sie waren, als Sie die Funktion aufgerufen haben).
CijcoSistems