O que significa (arg: n) no prompt de comando?

10

No curso de linha de comando do Codecademy , ao tentar usar o atalho de teclado Alt+Shift+#(que deve comentar a linha atual) no prompt de comando, ele alterna o prompt de $para em (arg: 3)vez de adicionar um traço no início da linha. Alt+Shift+@fará com que seja exibido (arg: 2), etc. Veja a última linha na captura de tela abaixo. Antes que eu batesse Alt+Shift+#, era justo $.

captura de tela

O atalho funciona bem na minha máquina.

  1. O que é isso (arg: n)?
  2. Do que os atalhos de teclado dependem para funcionar? Layout do teclado? Distribuição OS? Emulador de terminal? CLI padrão? O que?
user331380
fonte

Respostas:

15

Este é o prompt da biblioteca readline quando você está inserindo um argumento numérico. Ao digitar AltShift@no teclado, você aparentemente está inserindo para Alt2quais mapas M-2, que é executado digit-argumentna linha de leitura por padrão e começa a inserir um argumento numérico. Se você pressionar Alt3(que AltShift#mapeia no seu caso), verá o prompt mudar para (arg: 23); você pode continuar com qualquer Altcombinação de dígitos.

Esses argumentos são usados ​​para certas funções de linha de leitura, por exemplo yank-nth-arg. Para ver isso em ação, execute

echo Hello my friend

depois pressione Alt2seguido de CtrlAltY; você verá o (arg: 2)prompt aparecer e desaparecerá, e o segundo argumento do comando anterior ("meu") será anexado à sua linha de comando atual.

Consulte a documentação vinculada acima para obter detalhes. O Bash usa o readline para manipular sua entrada; outras conchas não mostrarão o mesmo comportamento.

Alguns emuladores de terminal usam algumas dessas combinações de teclas para seus próprios propósitos; por exemplo, no Terminal GNOME, Altquatro dígitos muda para o n th guia. Você precisará desativar essas combinações para usar as funções de linha de leitura.

No seu caso, o emulador de terminal baseado na Web do Codecademy não parece lidar AltShiftmuito bem com combinações. Se você não precisar dos atalhos de argumento numérico, poderá adaptá-los novamente executando

bind Meta-3:insert-comment

Em teoria, você deve poder armazenar isso permanentemente adicionando

Meta-3: insert-comment

para um ~/.inputrcarquivo, mas não consegui fazer isso funcionar na Codecademy.

Stephen Kitt
fonte
1
Obrigado. Como desabilito a linha de leitura ou apenas uso um atalho de teclado para comentar a linha de comando atual?
precisa saber é o seguinte
Qual emulador de terminal você está usando?
Stephen Kitt
Quero saber como fazê-lo na Codecademy, não tenho como clicar com o botão direito e descobrir. ps -o 'cmd=' -p $(ps -o 'ppid=' -p $$)saídas /usr/local/bin/ein -service-port 4006 -http-port 4007. Isso ajuda?
precisa saber é o seguinte
1
@ user331380 Provavelmente você está usando o bashshell na Codeacademy lá. No shell interativo, você pode iniciar uma nova instância com bash --noediting. Isso irá desativar readline, mas tenha em mente que readlinebiblioteca é responsável por uma grande quantidade de recursos de linha de edição, o que pode fazer uso interativo de shell um pouco mais desconfortável
Sergiy Kolodyazhnyy
Talvez valha a pena mencionar que isso também acontece nas combinações de teclas vi quando você simplesmente digita o número no modo normal para representar o argumento numérico para o próximo comando do modo normal digitado.
JOL