Stoppen Sie die automatische Ausführung des Terminals, wenn Sie einen Befehl einfügen

Stoppen Sie die automatische Ausführung des Terminals, wenn Sie einen Befehl einfügen

Richtig, das ist eine etwas nervige Funktion, weil das manchmal passiert und manchmal nicht, sehr merkwürdig.

Ich füge einen Befehl in das Terminal ein, um seine Argumente zu optimieren, undManchmales wird ausgeführt, sobald ich es einfüge. Manchmal passiert das nicht.

Dies reicht von peinlich (Posten unsinniger Kommentare in einem IRC) bis gefährlich.

Wie kann ich diese Funktion endgültig deaktivieren? Ich möchte nie, nie, nie, dass das Terminal automatisch ausgeführt wird, wenn ich etwas hineinfüge.

Antwort1

Es erfolgt keine automatische Ausführung. Wahrscheinlich kopieren Sie auch einen Zeilenumbruch (oder mehr) nach dem Befehl.

Wenn Sie einen Befehl einfügenmiteine Unterbrechung, die Shell (Befehlszeile) geht davon aus, dass Sie die Unterbrechungstaste (Eingabe, Return) selbst gedrückt haben.


Diese Antwort erklärt nur, warum OP das unerwünschte Verhalten zeigt.eine andere Antwort, es gibt eine echte Lösungzum Problem des OP.

Antwort2

EinsrealDie Lösung besteht darin, den Bearbeitungsmodus zu öffnen ctrl-x ctrl-eund dann Ihre Zwischenablage sicher in den Editor Ihrer Wahl (normalerweise Emacs oder Vim) einzufügen. Nachdem Sie mit der Bearbeitung des Befehls fertig sind, speichern und beenden Sie ihn. Er wird dann in der Befehlszeile ausgeführt. Dies ist eine gute Angewohnheit für lange oder komplexe Befehle, insbesondere beim Einfügen von Commit-Hashes in Git-Befehle, und kann Ihnen auf lange Sicht helfen, einige beängstigende Ergebnisse zu vermeiden.

Der Editor kann durch Setzen der Variablen VISUAL und EDITOR geändert werden (diese haben unterschiedliche Bedeutungen, sieheHier).

Antwort3

Wie andere bereits erwähnt haben, tritt das Problem auf, wenn der eingefügte Text Zeilenumbruchzeichen enthält. Mit diesem Wissen ist Ihre Frage mehr oder weniger dieselbe wiedieser hier zum Thema Server Fault. Andere Site, deshalb wiederhole ich meine Antwort hier …

Was Sie wollen, heißt 'eingeklammertes Einfügen', eine Funktion, die in einigen Shells verfügbar ist.

Vorausgesetzt, Sie verwenden eine aktuelle Version der Bash-Shell, können Sie sie für die aktuelle Sitzung wie folgt aktivieren:

bind 'set enable-bracketed-paste on'

Probieren Sie es jetzt aus, indem Sie mehrere Zeilen einfügen:

echo Hello world
echo Again, I say, hello!

Die Shell erkennt, dass der Text eingefügt (nicht eingetippt) wurde, und wartet mit einer Eingabeaufforderung auf Ihre Bestätigung. Wenn alles sicher aussieht, drücken Sie die Eingabetaste. Wenn nicht, drücken Sie zum Abbrechen Strg-C.

Wenn Sie das Einfügen in Klammern für jede neue Sitzung aktivieren möchten, fügen Sie den Befehl zu Ihrer .inputrc-Datei hinzu:

cd ~
echo "set enable-bracketed-paste" >> .inputrc

Eine weitere Möglichkeit ist der Wechsel vonSchlagZuzsh, wobei das Einfügen in Klammern standardmäßig aktiviert ist. So ersetzen Sie Ihre aktuelle Shell durch eine Zsh-Shell:

exec zsh

Mit zsh wird eingefügter Text hervorgehoben, was praktisch ist. Drücken Sie erneut die Eingabetaste, um den/die Befehl(e) auszuführen, oder Strg-C, um abzubrechen.

Wenn Ihnen zsh gefällt und Sie es zur Standard-Shell machen möchten:

chsh -s /bin/zsh

Antwort4

Ich verwende diesen Alias ​​zum Einfügen und lasse meinen Befehl NICHT ausführen

alias nonewlinepaste='history -s `xsel -b`; sleep 1; xdotool key Up 1>/dev/null'  # xsel ref. https://unix.stackexchange.com/a/96398/17671  # xdotool ref. https://unix.stackexchange.com/questions/267704/command-to-simulate-keyboard-input#comment1038650_267705

verwandte Informationen