Что означает (arg: n) в командной строке?

10

На курсе командной строки Codecademy , при попытке использовать сочетание клавиш Alt+Shift+#(которое должно комментировать текущую строку) в командной строке, оно переключает приглашение с $на (arg: 3)вместо добавления тире в начале строки. Alt+Shift+@будет отображаться (arg: 2)вместо этого и т. д. См. последнюю строку на скриншоте ниже. До меня Alt+Shift+#это было просто $.

снимок экрана

Ярлык отлично работает на моей машине.

  1. Что это за (arg: n)вещь?
  2. От чего зависят сочетания клавиш для работы? Раскладка клавиатуры? ОС дистрибутив? Терминальный эмулятор? CLI по умолчанию? Какие?
user331380
источник

Ответы:

15

Это подсказка библиотеки readline, когда вы вводите числовой аргумент. Путем ввода AltShift@на клавиатуре, вы , видимо , ввод Alt2которых сопоставляется M-2, которая проходит digit-argumentв Readline по умолчанию, и начинается ввод числовой аргумент. Если вы затем нажмете Alt3(что AltShift#отображается в вашем случае), вы увидите быстрое изменение на (arg: 23); Вы можете продолжить с любой Alt-значной комбинацией.

Эти аргументы используются, например, для определенных функций readline yank-nth-arg. Чтобы увидеть это в действии, запустите

echo Hello my friend

затем нажмите, Alt2а затем CtrlAltY; вы увидите, что (arg: 2)приглашение появляется, а затем исчезает, и второй аргумент предыдущей команды («my») будет добавлен к вашей текущей командной строке.

См. Связанную документацию выше для деталей. Bash использует readline для обработки ввода; другие оболочки не будут демонстрировать такое же поведение.

Некоторые эмуляторы терминала используют некоторые из этих комбинаций клавиш для своих собственных целей; например, в терминале GNOME, Alt-digit переключается на вкладку n . Вам нужно будет отключить эти комбинации, чтобы использовать функции readline.

В вашем случае веб-эмулятор терминала Codecademy, похоже, не AltShiftочень хорошо обрабатывает комбинации. Если вам не нужны сочетания клавиш с числовым аргументом, вы можете изменить их, запустив

bind Meta-3:insert-comment

В теории вы должны иметь возможность хранить это постоянно, добавив

Meta-3: insert-comment

в ~/.inputrcфайл, но я не мог заставить это работать на Codecademy.

Стивен Китт
источник
1
Спасибо. Как отключить readline или просто использовать сочетание клавиш для комментирования текущей командной строки?
user331380
Какой эмулятор терминала вы используете?
Стивен Китт
Я хочу знать, как это сделать на Codecademy, у меня нет способа щелкнуть правой кнопкой мыши и узнать. ps -o 'cmd=' -p $(ps -o 'ppid=' -p $$)выходы /usr/local/bin/ein -service-port 4006 -http-port 4007. Это помогает?
user331380
1
@ user331380 Скорее всего, вы используете bashоболочку на Codeacademy там. В интерактивной оболочке вы можете начать новый экземпляр с bash --noediting. Это отключит readline, но имейте в виду, что readlineбиблиотека отвечает за множество функций редактирования строк, что может сделать использование оболочки в интерактивном режиме немного более неудобным
Сергей Колодяжный
Стоит упомянуть, что это также происходит с привязками клавиш vi, когда вы просто вводите число в нормальном режиме, чтобы представить числовой аргумент для следующей команды, которую вы вводите в обычном режиме.
JoL