CD in das Verzeichnis von HISTORY in einem Bash-Skript oder Alias, z. B. $(!!)

CD in das Verzeichnis von HISTORY in einem Bash-Skript oder Alias, z. B. $(!!)

Ich möchte häufig in das Verzeichnis einer Datei auf meinem Dateisystem wechseln, bin mir aber nicht sicher, wo sich die Datei befindet.

Ich suche so danach:

find -type f -name "myfile.txt"

Nehmen wir der Einfachheit halber an, dass dies ein Ergebnis zurückgibt, z. B.

/ein/sehr/langer/Pfad/den/ich/meine/Datei/nicht/eingeben/möchte/

Normalerweise tippe ich dann Folgendes:

cd $(dirname $(!!))

Um in das Verzeichnis der gesuchten Datei zu wechseln...

Gibt es eine Möglichkeit, dies in ein Shell-Skript oder einen Alias ​​einzufügen, sodass ich im Wesentlichen Folgendes eingeben kann:

cdlast

und es lautet:

cd $(dirname $(!!))

den VERSION der Shell verwenden? Ich habe es versucht und die Shell-Verlauf scheint in Bash-Skripten zu fehlen.

Antwort1

fc -sführt den vorherigen Befehl erneut aus:

alias cdlast='cd "$(dirname "$(fc -s 2> /dev/null)")"'

Oder verwenden Sie eval "$(history -p !!)":

alias cdlast='cd "$(dirname "$(eval "$(history -p !!)")")"'

Antwort2

Sie können einen Alias ​​verwenden.

alias cdlast='cd "$(dirname "$(eval $(history -p !!))")"'

Stellen Sie sicher, dass Sie die doppelten Anführungszeichen verwenden. Diese verhindern, dass die Ergebnisse der Befehlsersetzungen in einzelne Wörter aufgeteilt werden, wenn sie Leerzeichen enthalten, und als Platzhaltermuster interpretiert werden, wenn sie Sonderzeichen wie *und enthalten ?.

Antwort3

Ich würde eine Funktion verwenden:

gotofile () { pushd "$(find . -name "$1" -printf "%h\n")"; }

Ersetzen Sie "." durch ein geeignetes Verzeichnis (vielleicht "~")

verwandte Informationen