Wie kann man in Unix im Handumdrehen auf den Verlauf zugreifen?


12

Zum Beispiel, wenn ich a

mkdir thisismyfolder912

Ich erinnere mich, dass es einen einfacheren Weg gibt, zu dem man wechseln kann, thisismyfolder912als ein zu tun

cd thisismyfolder912

Was ist das und wie funktioniert es? Was sind auch die anderen Möglichkeiten, wie ich das verwenden kann?


1
Verwenden Sie die TAB-Vervollständigung für Befehle und Verzeichnisse, die nicht in Ihrer letzten Verlaufsliste enthalten sind. cd this<TAB>
Invertzucker

Antworten:


10

Sprechen Sie über die klassische Historienerweiterung oder die Readline-Verarbeitung? cd !$auf der nächsten Eingabezeile wird in dem letzten Argumente der vorhergehenden Zeile ersetzen, oder M-.oder M-_es wird unter Verwendung von Readline zerren.



Ich habe gesucht cd !$. "Classic History Expansion oder Readline Processing" Ich verstehe nicht genau, was Sie meinen ...
Lazer

2
@Lazer !$ist eine historische Erweiterung . Die Shell verarbeitet es, während es Ihren Befehl analysiert. M-. ist ein Readline-Tastendruck; readline ist die Bibliothek, die jede Taste behandelt, die Sie drücken, und es wird angezeigt, dass Sie M- gedrückt haben. und gibt das letzte Argument des letzten Befehls automatisch für Sie ein
Michael Mrozek

9

Wenn es bei Ihrer Frage um den Zugriff auf den Befehlsverlauf geht, versuchen Sie diesen gut benannten Befehl

history 

Sie können auch Ctrl+ versuchen rund einen Befehl eingeben, an den Sie sich erinnern möchten, dass Sie ihn kürzlich eingegeben haben.

(reverse-i-search)`cd ': cd mydir/data/

Drücken Sie ESC, um den Befehl auszuwählen oder zu beenden. Das funktioniert bei mir zumindest unter SuSE; Ich bin mir nicht sicher über andere Distributionen.


4
WHOA! Das wird tatsächlich mein Leben verändern. Scheiß auf dich history | grep ...!
Oli

Dies ist nicht nur SuSE-bezogen, ich denke, es ist eine Bash-Funktion :)
Sakisk

Ich habe gerade gelesen, viwie man die Kommandozeile verwaltet. Sieht super cool aus. Verwenden von vi zum Bearbeiten von Shell-Befehlen
Banjer


2

das hat bei mir immer geklappt:

mkdir thisismyfolder
cd $_

Beachten Sie jedoch Folgendes: $!Wird auf das letzte Wort erweitert, das Sie tatsächlich eingegeben haben, und wird $_nach der Erweiterung auf das letzte Wort erweitert. Sie können also echo /tmp/tmpfile*eine Reihe von Dateien anzeigen, die Sie entfernen möchten, aber dann rm $_wird nur eine davon entfernt.
jmb

1

Nehmen Sie einen Tipp von einem anderen Faden, wenn Sie sagen:

bind '"\e[A"':history-search-backward
bind '"\e[B"':history-search-forward

In Ihrem .bashrc können Sie dann etwas aus Ihrem Verlauf eingeben und dann den Aufwärtspfeil drücken. Anstatt den Verlauf Element für Element durchzugehen, wird direkt zu vorherigen Einträgen gesprungen, die mit dem beginnen, was Sie bereits haben getippt.

Ich denke, das hilft bei dem in der Frage angegebenen Beispiel nicht viel, aber es ist eine Sache, die mir dabei hilft, im Handumdrehen auf die Geschichte zuzugreifen.


1

Wenn Sie Bash verwenden, empfehle ich pushdund popd. Sie können einen Stapel von Verzeichnissen erstellen und diese schnell durchsuchen. Siehe dieses Beispiel:

PWD:~$ pushd /opt/google/chrome/resources/
/opt/google/chrome/resources ~
PWD:/opt/google/chrome/resources$ pushd /etc/cron.daily/
/etc/cron.daily /opt/google/chrome/resources ~
PWD:/etc/cron.daily$ pushd /opt/pac/lib/method/
/opt/pac/lib/method /etc/cron.daily /opt/google/chrome/resources ~
PWD:/opt/pac/lib/method$ popd
/etc/cron.daily /opt/google/chrome/resources ~
PWD:/etc/cron.daily$ popd
/opt/google/chrome/resources ~
PWD:/opt/google/chrome/resources$ popd
~
PWD:~$

Wenn Sie eine abgekürzte Eingabeaufforderung verwenden, werden die Beiträge besser lesbar. (Ich beziehe mich auf das Entfernen der Benutzer- und Hostnamen. Ich verstehe, dass das $pushd
Anzeigen

1

In diesem Zusammenhang empfehle ich die Verwendung von histverify in bash. Fügen Sie dies in Ihre ~ / .bashrc ein:

shopt -s histverify

Dies veranlasst bash, den Befehl nach dem Erweitern von! $ Oder anderen Verlaufsfunktionen auszudrucken, und gibt Ihnen die Möglichkeit, ihn sich anzusehen, bevor Sie erneut die Eingabetaste drücken, um ihn tatsächlich auszuführen. Für mich ist die Überprüfung der geistigen Gesundheit den gelegentlichen zusätzlichen Tastendruck wert. Ich möchte sicherstellen, dass ich den cd fooBefehl ausführe, nicht den rm -rf foo...

Ich benutze den Ctrl-RAnsatz auch häufig Alt-.(was gut zu dem von Ihnen beschriebenen Szenario passt). Ich werde! $ Gelegentlich verwenden.

Dies sind sehr nützliche Allzwecktechniken.

Aber um Ihre spezifische Frage anzusprechen:

Das Erstellen eines Verzeichnisses und das direkte Einspielen von CDs in dieses Verzeichnis ist eine so häufig vorkommende Kombination, dass es nützlich ist, eine Funktion zu haben, um es zusammenzufassen.

function mcd {
  local newdir='_mcd_command_failed_'
  if [ -d "$1" ]; then   # Dir exists, mention that
    echo "$1 exists..."
    newdir="$1"
  else
    if [ -n "$2" ]; then   # We've specified a mode
        command mkdir -p -m $2 "$1" && newdir = "$1"
    else                   # Plain old mkdir
        command mkdir -p "$1" && newdir="$1"
    fi
  fi
  builtin cd "$newdir"   # No matter what, cd into it
}

Verwendung: mcd thisismyfolder


1

Wenn Ihre Shell readline verwendet (was ist der Fall für bash), können Sie so etwas wie ATL+ .zusammen drücken ?

Aus der GNU Readline-Dokumentation :

yank-last-arg (M-. oder M-_)

Fügen Sie das letzte Argument in den vorherigen Befehl ein (das letzte Wort des vorherigen Verlaufseintrags). Verhalten Sie sich mit einem Argument genau wie yank-nth-arg. Aufeinanderfolgende Aufrufe von yank-last-arg durchlaufen die Verlaufsliste und fügen der Reihe nach das letzte Argument jeder Zeile ein.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.