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

26

Às vezes, ao copiar e colar texto da saída de comandos, acidentalmente usarei Ctrl+ em cvez de Ctrl+ Shift+ c.

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

Por que é isso? Por que a linha de comando interpreta a controlentrada como ^?

Diga-me o porquê
fonte

Respostas:

35

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

  • ^C → ETX (Fim do texto, envia um sinal de interrupção), ASCII 0x03
  • ^D → EOT (Fim da transmissão, finaliza a entrada), ASCII 0x04
  • ^H→ BS (Backspace \b), ASCII 0x08
  • ^J→ LF (avanço de linha \n), ASCII 0x0A
  • ^L → FF (Alimentação de formulário, nova página, limpa o terminal), ASCII 0x0C
  • ^M→ CR (retorno de 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 .

Eu acho que os mais importantes a serem lembrados são Ctrl+ C, Ctrl+ De Ctrl+ L.

s3lph
fonte
O uso do sinal de intercalação ^como símbolo para "controle" data de tempos pré-gráficos, quando os terminais eram somente texto, e acredito que antes disso, quando tínhamos cartões e papel, nenhum terminal. Eu adoraria saber por que o cursor foi escolhido como símbolo.
Paddy Landau
8

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

A convenção, decorrente dos terminais VT com suporte a ANSI , é representar o combo CTRL+ KEYrepresentando CTRLcom um sinal de intercalação ( ^) e KEYcom KEY.

kos
fonte
5

Ao copiar e colar de / para um terminal, é recomendável usar os atalhos Ctrl+ Inserte Shift+ Insertrespectivamente.

Esses são os atalhos mais tradicionais para uso em terminais, embora você note que em um ambiente gráfico X Ctrl+ Inserte Shift+ Insertestão vinculados aos mesmos Ctrl+ Ce Ctrl+ V.

Na maioria dos terminais Ctrl+ C(representados 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 no local em que deseja colá-lo. Não é necessário teclado.

Keefer Rourke
fonte
2
Desculpe, mas você não entendeu a pergunta. O OP queria saber por que a sequência ^Cou similares aparecem ao pressionar CTRL + C (ou CTRL + outra letra). Não se trata de como copiar e colar corretamente as coisas no terminal, para as quais sua resposta seria ótima.
Byte Commander
@ByteCommander, você está certo! desculpas, deixarei minha resposta como está, no entanto, pois parece que a pergunta já foi respondida corretamente :) Alguém pode tropeçar nisso e achar útil o que escrevi.
Keefer Rourke
-2

Você deve usar Ctrl+ Ce 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 certos ambientes gráficos em que a GUI captura algumas teclas e faz algo especial, mas se as teclas forem realmente enviadas para a linha de comando, não haverá diferença. É por isso que pressionar Ctrl+ Cpode mostrar ^ C como C maiúsculo, em vez de C. minúsculo. A linha de comando não faz distinção sobre qual você pressionou (e presume-se que maiúsculas sejam mais fáceis de ler). Isso é verdade para letras; para outros caracteres, isso Shiftpode ter um efeito.)

Pressionar Ctrl- Cenvia o código ASCII 64 abaixo da posição da letra maiúscula na tabela ASCII (e 96 a menos que a posição da letra minúscula na tabela ASCII). Então, pressionar Ctrl- c(em minúscula) envia o código ASCII 3 (que é 64 a menos do que Co código ASCII de capital 67). Em muitos ambientes, você pode segurar Alte pressionar 3o teclado numérico (e soltar a 3tecla e, em seguida, soltar a Alttecla) e poderá obter o mesmo efeito.

Em relação a ^ C, o ^ é apenas uma abreviação bem conhecida da Ctrltecla " ". Da mesma forma, M- é um atalho para a Alttecla " ". Err, sim. M significa a palavra "Meta", que pode ser inserida mantendo Altpressionado o que vem a seguir, ou algumas vezes pressionando Esc(e liberando Esc) e pressionando o que vem a seguir. O artigo da Wikipedia sobre "Chave de controle": a seção "Notação" descreve isso como "Notação tradicional". Isso também é conhecido como Caret Notation ( artigo da Wikipedia sobre Caret Notation , Unix StackExchange: a pergunta de ryvnf sobre 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, o shell não está lendo nada e acreditando que é um sinal de intercalação. O que está acontecendo é que o shell está usando a conhecida notação de intercalação para saída. Como outro exemplo, você pode ver o conhecido pager, "less", usar notação de sinal de intercalação executando:dd if=/dev/zero bs=64 count=1 | less

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

TOOGAM
fonte
4
O DevRobot está perguntando especificamente sobre o uso de Ctrl-C (ou melhor, Shift-Ctrl-C) no contexto de copiar e colar, o que implica um terminal da GUI. Você não está necessariamente incorreto, mas sua explicação é definitivamente confusa para alguém que vem da perspectiva de um usuário GUI.
RM