GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie greife ich auf das letzte Argument eines kommentierten Befehls zu?

Ich finde . (alt . für viele andere) sehr nützlich, wenn Sie in einem Terminal arbeiten, indem Sie das letzte Argument aus der letzten Zeile an der aktuellen Eingabeaufforderung einfügen. Es funktioniert jedoch nicht, wenn die letzte Zeile kommentiert wurde (vorausgesetzt set -o interactivecomments ).

Ich kann mir keinen genauen Anwendungsfall vorstellen, aber es ist mehrmals vorgekommen, dass ich einen Befehl auskommentiert habe, von dem ich vor der Ausführung erkannt habe, dass er zu diesem Zeitpunkt nicht das war, was ich brauchte, und dann wollte ich das letzte Argument davon in a nachfolgenden Befehl.

Mir ist klar, dass es eine Logik gibt, alles Auskommentierte zu ignorieren, da es nie interpretiert wird und daher nichts davon in Argumente zerlegt wird, aber Gibt es überhaupt eine Möglichkeit zu tun, was ich will?

Es wäre nicht ideal – aber brauchbar – wenn ich einen anderen Tastendruck verwenden müsste, der an einen alternativen Befehl gebunden wäre, der das tun würde, was ich will.

Ich verwende Zsh, aber eine Bash-Lösung könnte funktionieren oder nahe an dem sein, was ich in Zsh tun müsste.

Akzeptierte Antwort:

Kommentieren Sie den Befehl nicht aus.

Setzen Sie stattdessen einen : vorne und nicht ein # . Dadurch werden Ihre Befehlstextargumente zum Null-Dienstprogramm : , die nichts tut, wenn sie ausgeführt wird. Die Argumente werden tokenisiert und geparst, weil es immer noch ein Befehl ist, aber nichts anderes mit ihnen gemacht wird.

Es gibt Fälle, in denen dies nicht geeignet ist:insbesondere beim Herausfinden des Befehls selbst hat nebenwirkungen. Ein einfaches Beispiel ist die Befehlssubstitution:

$ : log $(find -print -delete) --target /var/run/cache

In diesem Fall der Befehl innerhalb von $(...) würde ausgeführt und in die Argumente von : eingesetzt , obwohl der ursprüngliche Befehl selbst niemals ausgeführt werden würde. Ein weniger destruktiver Fall wäre ${foo:=default} Parametererweiterung, die den Nebeneffekt hat, $foo einen Wert zuzuweisen .

Schließlich finden noch Umleitungen oder Pipes statt:

$ : foo > outfile
$ : bar | grep x | ...

In beiden Fällen wird eine leere Ausgabe an das Ziel gesendet, das die Datei abschneidet oder erstellt oder die nachfolgenden Befehle ausführt, denen die leere Eingabe, die sie erhalten, möglicherweise nicht gefällt.

Wenn Sie keine dieser speziellen Bedenken für Ihren Befehl haben, ist dies absolut sicher und funktioniert in zsh, Bash und jeder POSIX-kompatiblen Shell (obwohl das alt-.-Verhalten danach nicht überall funktioniert).

Wenn Sie speziell das letzte Wort möchten, bietet zsh anpassbare Tastenkombinationen und Befehle, mit denen Sie die Befehlszeile manipulieren können. Wenn Sie bindkey '^K' kill-region dann können Sie wieder vor das Wort Strg gehen –K bis zum Zeilenanfang löschen, : , und haben Sie dann einen sicheren Befehl mit nur einem Wort, das Ihnen wichtig ist.

Verwandte:Debian – Wie installiere ich einige Pakete von „unstable“ Debian auf einem Computer, auf dem „stable“ Debian läuft?
Linux
  1. Funktionsweise des Befehls oc debug in OpenShift

  2. Wie verwende ich den basename-Befehl?

  3. $_ Gegen !$. Letztes Argument des vorhergehenden Befehls und Ausgabeumleitung?

  4. Wie funktioniert der Tee-Befehl?

  5. Wie kann ich das Argument des vorherigen Bash-Befehls abrufen?

So verwenden Sie den Linux-te-Befehl

So verwenden Sie den obersten Befehl unter Linux

So verwenden Sie den Linux-Ping-Befehl

So verwenden Sie den nmap-Befehl

So passen Sie den Linux-Befehl top an

So verwenden Sie den fd-Befehl auf einem Linux-System