Co oznacza (arg: n) w wierszu polecenia?

10

Na kursie z linii poleceń Codecademy podczas próby użycia skrótu klawiaturowego Alt+Shift+#(który powinien skomentować bieżącą linię) w wierszu polecenia, zmienia wiersz z $na (arg: 3)zamiast zamiast myślnika na początku wiersza. zamiast tego Alt+Shift+@wyświetli się (arg: 2)itd. Zobacz ostatni wiersz na zrzucie ekranu poniżej. Zanim uderzyłem Alt+Shift+#, było po prostu $.

zrzut ekranu

Skrót działa dobrze na moim komputerze.

  1. Co to za (arg: n)sprawa?
  2. Od czego zależą skróty klawiaturowe do pracy? Układ klawiatury? Dystrybucja systemu operacyjnego? Emulator terminala? Domyślny CLI? Co?
użytkownik331380
źródło

Odpowiedzi:

15

Jest to monit biblioteki readline podczas wprowadzania argumentu numerycznego. Pisząc AltShift@na klawiaturze, najwyraźniej wpisujesz, do Alt2których map M-2, który domyślnie działa digit-argumentw trybie readline i zaczyna wprowadzać argument liczbowy. Jeśli następnie naciśniesz Alt3(co AltShift#w twoim przypadku odwzorowuje), zobaczysz szybką zmianę na (arg: 23); możesz kontynuować z dowolną Altkombinacją cyfr.

Argumenty te są używane na przykład do niektórych funkcji readline yank-nth-arg. Aby zobaczyć to w akcji, uruchom

echo Hello my friend

następnie naciśnij, Alt2a następnie CtrlAltY; zobaczysz (arg: 2)monit, a następnie zniknie, a drugi argument poprzedniego polecenia („my”) zostanie dołączony do bieżącego wiersza polecenia.

Szczegółowe informacje znajdują się w dokumentacji powiązanej powyżej. Bash używa readline do obsługi danych wejściowych; inne pociski nie będą zachowywać się tak samo.

Niektóre emulatory terminali wykorzystują niektóre z tych kombinacji klawiszy do własnych celów; na przykład w GNOME Terminal Alt-digit przełącza na n- tą kartę. Musisz wyłączyć te kombinacje, aby korzystać z funkcji readline.

W twoim przypadku internetowy emulator terminala Codecademy nie radzi sobie AltShiftzbyt dobrze z kombinacjami. Jeśli nie potrzebujesz numerycznych skrótów argumentów, możesz zmienić ich przeznaczenie, uruchamiając

bind Meta-3:insert-comment

Teoretycznie powinieneś być w stanie przechowywać to na stałe, dodając

Meta-3: insert-comment

do ~/.inputrcpliku, ale nie mogłem tego zmusić do pracy w Codecademy.

Stephen Kitt
źródło
1
Dziękuję Ci. Jak wyłączyć readline lub w inny sposób po prostu użyć skrótu klawiaturowego, aby skomentować bieżący wiersz poleceń?
user331380
Jakiego emulatora terminala używasz?
Stephen Kitt
Chcę wiedzieć, jak to zrobić w Codecademy, nie mam sposobu, aby kliknąć prawym przyciskiem myszy i dowiedzieć się. ps -o 'cmd=' -p $(ps -o 'ppid=' -p $$)wyjścia /usr/local/bin/ein -service-port 4006 -http-port 4007. czy to pomaga?
user331380,
1
@ user331380 Prawdopodobnie używasz tam bashpowłoki w Codeacademy. W interaktywnej powłoce można rozpocząć nową instancję bash --noediting. Spowoduje to wyłączenie readline, ale należy pamiętać, że readlinebiblioteka jest odpowiedzialna za wiele funkcji edycji linii, które mogą sprawić, że interaktywne korzystanie z powłoki będzie nieco bardziej niewygodne
Sergiy Kolodyazhnyy
Warto wspomnieć, że dzieje się tak również w przypadku skrótów klawiszowych vi, gdy po prostu wpisujesz liczbę w trybie normalnym, aby reprezentować argument liczbowy do następnego wpisanego polecenia w trybie normalnym.
JoL