O que faz com que uma cópia / pasta no terminal execute o comando algumas vezes?


24

Quando você cola algum comando no terminal, ele às vezes executa automaticamente o comando (como se a tecla "Enter" foi pressionada), às vezes não.

Eu uso o Linux há muito tempo, colei milhares de comandos em vários consoles em muitas distribuições e ainda não consigo saber se o comando que estou prestes a colar será executado automaticamente ou não.

O que desencadeia esse comportamento?


5
Se você quiser evitar se preocupar com isso, digite { (com espaço) antes de colar e termine com }. Não tem efeito no funcionamento dos comandos colados, mas impede que o shell o execute até você fechar o bloco. Descrito aqui [ gnu.org/software/bash/manual/html_node/Command-Grouping.html]
— loa_in_ 27/10/2015

Respostas:


37

É o caractere de retorno no texto que você está copiando que está acionando a execução automática.

Vamos dar um exemplo diferente, copie essas linhas de uma só vez e cole-as no seu terminal:

echo "Hello";
echo "World";

Se você olhar no seu terminal, não verá o seguinte:

$ echo "Hello";
echo "World";

Você verá isso (também pode haver uma linha dizendo World):

$ echo "Hello";
Hello
$ echo "World";

Em vez de esperar que toda a entrada seja colada, a primeira linha é executada (e pelo mesmo motivo, a segunda linha pode ou não fazê-lo também). Isso ocorre porque há um RETURNcaractere entre as duas linhas.

Quando você pressiona a ENTERtecla do teclado, tudo o que você está fazendo é enviar o caractere com o valor ASCII de 13. Esse personagem é detectado imediatamente pelo seu terminal e sabe que possui instruções especiais para executar o que você digitou até o momento.

Quando armazenado no computador ou impresso na tela, o RETURNcaractere é igual a qualquer outra letra do alfabeto, número ou símbolo. Esse caractere pode ser excluído com backspace ou copiado para a área de transferência como qualquer outro caractere comum.

A única diferença é que, quando o navegador vê o caractere, ele sabe que, em vez de imprimir um caractere visível, deve tratá-lo de maneira diferente e possui instruções especiais para mover o próximo conjunto de texto para a próxima linha. O RETURNcaractere e o SPACEcaractere (ascii 32), juntamente com alguns outros caracteres raramente usados, são conhecidos como "caracteres não imprimíveis" por esse motivo.

Às vezes, quando você copia texto de um site, é difícil copiar apenas o texto e não o retorno no final (e geralmente é dificultado pelo estilo na página).


Hora da experiência!

Abaixo, você encontrará dois comandos que ilustram o problema e que você pode "praticar". Inicie o cursor logo antes echoe arraste até que o realce esteja logo antes da seta:

echo "Wait for my signal...";<- End cursor here right after the semicolon

E agora tente o segundo comando. Inicie o cursor logo antes echoe arraste para baixo até que o cursor esteja na segunda linha, mas está bem na frente da <-seta. Copie-o e cole-o no seu terminal:

echo 'Go go go!';
<- End cursor here right before the arrow

Dependendo do seu navegador, talvez nem seja visível que o texto que você selecionou passou por duas linhas. Mas quando você colá-lo no terminal, verá que ele executa a linha, porque encontrou um RETURNcaractere no texto copiado.


5
Para reduzir a complexidade, ignorei completamente mencionar que o Windows usa duas chaves diferentes para retornos. Apenas saiba que é uma angústia e uma luta diárias com as quais temos que lidar.
— IQAndreas 22/10

espaço é um personagem impressão
— mikeserv

11
Possivelmente. No entanto, quando eu testo uma pasta do Firefox em um shell (com stty definido como "bruto"), as linhas terminam com novas linhas - não com retorno de carro.
— Thomas Dickey

11
Você não precisa ir para a próxima linha. Se você selecionar e passar o ponto-e-vírgula uma quantidade suficiente (2-3 caracteres), ela selecionará a linha inteira, o que significa que você pegou uma nova linha.

@ThomasDickey Você está no Windows ou em um sistema Unix?
— IQAndreas

10

Quando você seleciona texto, se incluir uma nova linha (invisível) no final de uma linha, ela estará no texto colado. Isso é consistente em todos os emuladores de terminal que eu conheço. A nova linha faz o que você está chamando de "validar".

Em alguns sistemas (como aqueles que usam terminais síncronos como o IBM 3270), a Enterchave "validava" a tela copiando todas as alterações no host.



2

O que desencadeia esse comportamento?

O caractere de nova linha.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.