Cosa significa (arg: n) nel prompt dei comandi?


10

Nel corso della riga di comando di Codecademy , quando si tenta di utilizzare la scorciatoia da tastiera Alt+Shift+#(che dovrebbe commentare la riga corrente) nel prompt dei comandi, cambia il prompt da $a (arg: 3)invece di aggiungere un trattino all'inizio della riga. Alt+Shift+@lo visualizzerà (arg: 2)invece, ecc. Vedi l'ultima riga nello screenshot qui sotto. Prima di colpire Alt+Shift+#era giusto $.

immagine dello schermo

Il collegamento funziona bene sulla mia macchina.

  1. Cos'è questa (arg: n)cosa?
  2. Da cosa dipendono le scorciatoie da tastiera per funzionare? Layout della tastiera? Distro OS? Emulatore terminale? CLI predefinita? Che cosa?

Risposte:


15

Questo è il prompt della libreria readline quando si inserisce un argomento numerico. Digitando AltShift@sulla tastiera, apparentemente stai inserendo Alt2quali mappe M-2, che viene eseguito digit-argumentin readline per impostazione predefinita e inizia a immettere un argomento numerico. Se poi premi Alt3(su quali AltShift#mappe nel tuo caso) vedrai il prompt cambiare in (arg: 23); puoi continuare con qualsiasi Altcombinazione -digit.

Questi argomenti sono usati per alcune funzioni readline, ad esempio yank-nth-arg. Per vederlo in azione, esegui

echo Hello my friend

quindi premere Alt2seguito da CtrlAltY; vedrai (arg: 2)apparire il prompt, quindi scomparire e il secondo argomento del comando precedente ("mio") verrà aggiunto alla tua riga di comando corrente.

Vedere la documentazione collegata sopra per i dettagli. Bash usa readline per gestire il suo input; le altre shell non mostreranno lo stesso comportamento.

Alcuni emulatori di terminale utilizzano alcune di queste combinazioni di tasti per i propri scopi; per esempio in GNOME Terminal, Altdigit passa al n ° tab. Dovrai disabilitare queste combinazioni per usare le funzioni readline.

Nel tuo caso, l'emulatore di terminale basato sul web di Codecademy non sembra gestire AltShiftmolto bene le combinazioni. Se non hai bisogno delle scorciatoie degli argomenti numerici, puoi riutilizzarle eseguendo

bind Meta-3:insert-comment

In teoria dovresti essere in grado di archiviarlo permanentemente aggiungendo

Meta-3: insert-comment

in un ~/.inputrcfile, ma non sono riuscito a farlo funzionare su Codecademy.


1
Grazie. Come disabilitare readline o utilizzare semplicemente una scorciatoia da tastiera per commentare la riga di comando corrente?
user331380

Quale emulatore di terminale stai usando?
Stephen Kitt,

Voglio sapere come farlo su Codecademy, non ho modo di fare clic con il tasto destro e scoprirlo. ps -o 'cmd=' -p $(ps -o 'ppid=' -p $$)uscite /usr/local/bin/ein -service-port 4006 -http-port 4007. questo aiuta?
user331380

1
@ user331380 Probabilmente stai usando bashshell su Codeacademy lì. Nella shell interattiva, è possibile avviare una nuova istanza con bash --noediting. Ciò disabiliterà readline, ma tieni presente che la readlinelibreria è responsabile di molte funzionalità di modifica delle linee, che possono rendere leggermente più scomodo l'uso interattivo della shell
Sergiy Kolodyazhnyy

Vale la pena ricordare che ciò accade anche sui tasti di scelta rapida vi quando si digita semplicemente il numero in modalità normale per rappresentare l'argomento numerico al successivo comando in modalità normale che si digita.
JoL
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.