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?

kursus
fonte
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.

IQAndreas
fonte
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.

Thomas Dickey
fonte
2

O que desencadeia esse comportamento?

O caractere de nova linha.

PSkocik
fonte