Was bedeutet (arg: n) in der Eingabeaufforderung?

10

Wenn Sie im Befehlszeilenkurs der Codecademy versuchen, die Tastenkombination Alt+Shift+#(die die aktuelle Zeile kommentieren soll) in der Eingabeaufforderung zu verwenden, wird die Eingabeaufforderung von $auf umgeschaltet , (arg: 3)anstatt am Anfang der Zeile einen Bindestrich hinzuzufügen. Alt+Shift+@wird (arg: 2)stattdessen angezeigt usw. Siehe die letzte Zeile im folgenden Screenshot. Bevor ich traf Alt+Shift+#, war es nur $.

Bildschirmfoto

Die Verknüpfung funktioniert auf meinem Computer einwandfrei.

  1. Was ist das für ein (arg: n)Ding?
  2. Wovon hängen Tastaturkürzel ab, um zu funktionieren? Tastaturbelegung? OS Distribution? Terminal-Emulator? Standard-CLI? Was?
user331380
quelle

Antworten:

15

Dies ist die Eingabeaufforderung der Readline-Bibliothek, wenn Sie ein numerisches Argument eingeben. Wenn Sie AltShift@auf Ihrer Tastatur tippen, geben Sie anscheinend ein, zu Alt2welchen Karten M-2, die standardmäßig digit-argumentin Readline ausgeführt werden, und beginnen mit der Eingabe eines numerischen Arguments. Wenn Sie dann drücken Alt3(welche AltShift#Karten in Ihrem Fall zugeordnet sind), wird die Eingabeaufforderung geändert (arg: 23). Sie können mit einer Altbeliebigen Kombination fortfahren.

Diese Argumente werden beispielsweise für bestimmte Readline-Funktionen verwendet yank-nth-arg. Führen Sie diese aus, um dies in Aktion zu sehen

echo Hello my friend

dann drücken Sie Alt2gefolgt von CtrlAltY; Die (arg: 2)Eingabeaufforderung wird angezeigt und dann ausgeblendet. Das zweite Argument des vorherigen Befehls („my“) wird an Ihre aktuelle Befehlszeile angehängt.

Weitere Informationen finden Sie in der oben verlinkten Dokumentation. Bash verwendet readline, um seine Eingabe zu verarbeiten. andere Muscheln zeigen nicht das gleiche Verhalten.

Einige Terminalemulatoren verwenden einige dieser Tastenkombinationen für ihre eigenen Zwecke. Im GNOME-Terminal wechselt Alt-digit beispielsweise zur n- ten Registerkarte. Sie müssen diese Kombinationen deaktivieren, um die Readline-Funktionen verwenden zu können.

In Ihrem Fall scheint der webbasierte Terminalemulator von Codecademy nicht AltShiftsehr gut mit Kombinationen umzugehen. Wenn Sie die Verknüpfungen für numerische Argumente nicht benötigen, können Sie sie durch Ausführen neu verwenden

bind Meta-3:insert-comment

Theoretisch sollten Sie dies durch Hinzufügen dauerhaft speichern können

Meta-3: insert-comment

zu einer ~/.inputrcDatei, aber ich konnte das nicht dazu bringen, an der Codecademy zu arbeiten.

Stephen Kitt
quelle
1
Vielen Dank. Wie deaktiviere ich die Lesezeile oder verwende auf andere Weise einfach eine Tastenkombination, um die aktuelle Befehlszeile zu kommentieren?
Benutzer331380
Welchen Terminalemulator verwenden Sie?
Stephen Kitt
Ich möchte wissen, wie es auf der Codecademy geht. Ich habe keine Möglichkeit, mit der rechten Maustaste zu klicken und es herauszufinden. ps -o 'cmd=' -p $(ps -o 'ppid=' -p $$)Ausgänge /usr/local/bin/ein -service-port 4006 -http-port 4007. Hilft das?
user331380
1
@ user331380 Wahrscheinlich verwenden Sie dort bashShell auf Codeacademy. In der interaktiven Shell können Sie eine neue Instanz mit starten bash --noediting. Das wird Readline deaktivieren, aber denken Sie daran, dass die readlineBibliothek für viele Funktionen zur Zeilenbearbeitung verantwortlich ist, die die interaktive Verwendung der Shell etwas unangenehmer machen können
Sergiy Kolodyazhnyy
Erwähnenswert ist, dass dies auch bei vi-Tastenkombinationen der Fall ist, wenn Sie die Zahl einfach im Normalmodus eingeben, um das numerische Argument für den nächsten von Ihnen eingegebenen Befehl im Normalmodus darzustellen.
JoL