Por que o ^ C, ^ V etc. aparece no terminal quando eu uso o atalho de teclado Ctrl + caractere?

24

Às vezes, ao copiar e colar texto da saída de comandos, eu usarei acidentalmente Ctrl + c ao invés de Ctrl + < kbd> Deslocamento + c .

Portanto, a linha de comando interpreta como ^C ...

Por que isso? Por que a linha de comando interpreta a entrada control como ^ ?

    
por DevRobot 01.12.2015 / 14:51

4 respostas

35

Na verdade, ele não insere a sequência de caracteres "^ C". Esta é apenas uma representação para caracteres de controle ASCII não imprimíveis, como:

  • ^C → ETX (Fim do texto, envia um sinal de eliminação), ASCII 0x03
  • ^D → EOT (Fim da transmissão, termina a entrada), ASCII 0x04
  • ^H → BS (Backspace, \b ), ASCII 0x08
  • ^J → LF (alimentação de linha, \n ), ASCII 0x0A
  • ^L → FF (alimentação de formulário, nova página, limpa o terminal), ASCII 0x0C
  • ^M → CR (retorno do carro, \r ), ASCII 0x0D

Este é apenas um pequeno extrato de possíveis caracteres de controle ASCII que podem ser inseridos usando o teclado; você pode encontrar uma lista completa aqui .

Acho que os mais importantes a serem lembrados são Ctrl + C , Ctrl + D e Ctrl + L .

    
por s3lph 01.12.2015 / 15:12
8

Como os combos CTRL + KEY são interpretados pelo terminal como caracteres ASCII não imprimíveis, e sendo estes não-imprimíveis você precisa de uma maneira de representá-los.

A convenção, decorrente de terminais VT com suporte a ANSI , representa a CTRL + KEY combo representando CTRL com um acento circunflexo ( ^ ) e KEY com KEY .

    
por kos 01.12.2015 / 15:12
5

Ao copiar e colar de / para um terminal, é melhor usar os atalhos Ctrl + Inserir e Shift + < kbd> Inserir respectivamente.

Estes são os atalhos mais tradicionais para uso terminal, embora você note que em um ambiente gráfico X Ctrl + Inserir e Shift + Insert estão ligados ao mesmo Ctrl + C e Ctrl + V .

Na maioria dos terminais Ctrl + C (representado por ^C ) são usados para interromper a execução de um processo, portanto colar com esse atalho não funcionará .

Para copiar e colar rapidamente, você pode utilizar o buffer primário do X, destacando o texto que deseja copiar e, em seguida, clicando com o botão do meio onde deseja colá-lo. Não é necessário teclado.

    
por Keefer Rourke 01.12.2015 / 15:10
-1

Você deve estar usando Ctrl + C e não Shift + Ctrl + C , porque na linha de comando, eles fazem a mesma coisa (e Ctrl + C é mais fácil que Shift + Ctrl + C ). Isso pode não ser verdade em determinados ambientes gráficos em que a GUI captura alguns pressionamentos de tecla e faz algo especial, mas se os pressionamentos de tecla forem realmente enviados para a linha de comando, não haverá diferença. É por isso que pressionar Ctrl + C pode mostrar ^ C como um C maiúsculo, em vez de um C. minúsculo. A linha de comando não faz distinção em qual você pressionou (e maiúscula) foi presumivelmente considerado mais fácil de ler). Isto é verdade para cartas; para outros caracteres, o Shift pode ter um efeito.

Pressionando Ctrl - C envia o código ASCII que está 64 abaixo da posição da letra maiúscula na tabela ASCII (e 96 menos que a posição da letra minúscula na tabela ASCII ). Então pressionando Ctrl - c (em letras minúsculas) envia o código ASCII 3 (que é 64 menor que o código ASCII de 67 do capital C ). Em muitos ambientes, você pode segurar Alt e então pressionar 3 no teclado numérico (e então soltar a tecla 3 , e soltar o Tecla Alt ) e você pode obter o mesmo efeito.

Em relação a ^ C, o ^ é apenas um atalho bem conhecido para a tecla " Ctrl ". Similarmente, M- é uma abreviação para a tecla " Alt ". Err, sim. M significa a palavra "Meta", que pode ser inserida pressionando Alt e pressionando o que vem a seguir, ou às vezes pressionando Esc (e liberando Esc ) e, em seguida, pressionando o que vem a seguir. O artigo da Wikipédia sobre "Control Key": "Notação" seção descreve isso como "notação tradicional". Isso também é conhecido como Caret Notation ( artigo da Wikipédia sobre a notação de Caret , Unix StackExchange: a pergunta de ryvnf sobre o Caret Notation ).

Em relação à última pergunta, o shell de comando não está "interpretando" nada para ser um sinal de intercalação. Em outras palavras, a casca não está lendo nada e acreditando que é um sinal de intercalação. O que está acontecendo é que o shell está usando a notação de cursor bem conhecida para saída. Como outro exemplo, você pode ver o pager conhecido, "less", usar notação de circunflexo executando: dd if=/dev/zero bs=64 count=1 | less

(O editor de texto "nano" também usa a notação de cursor em sua ajuda online, incluindo as telas completas de ajuda online mostradas após pressionar ^ G, também conhecido como Ctrl - g .)

    
por TOOGAM 01.12.2015 / 22:19