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

23

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

Eu uso o Linux há séculos, colei milhares de comandos em vários consoles em muitas distros e ainda não sei dizer se o comando que estou prestes a colar será executado automaticamente ou não.

O que desencadeia esse comportamento?

    
por kursus 22.10.2015 / 11:10

4 respostas

36

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

Vamos dar um exemplo diferente, copiar essas linhas de uma só vez e colá-las no seu terminal:

echo "Hello";
echo "World";

Se você procurar no seu terminal, você não verá isto:

$ 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 pela mesma razão, a segunda linha também pode ou não fazê-lo). Isso ocorre porque há um caractere RETURN entre as duas linhas.

Quando você pressiona a tecla ENTER em seu teclado, tudo o que você está fazendo é enviar o caractere com o valor ASCII de 13 . Esse caractere é detectado imediatamente pelo seu terminal e sabe que tem instruções especiais para executar o que você digitou até agora.

Quando armazenado no computador ou impresso na tela, o caractere RETURN é 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 regular.

A única diferença é que, quando o navegador vê o caractere, ele sabe que em vez de imprimir um caractere visível, ele deve ser tratado de forma diferente e tem instruções especiais para mover o próximo conjunto de texto para a próxima linha. O caractere RETURN e o caractere SPACE (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 muitas vezes é dificultado pelo estilo na página).

Tempo de experiência!

Abaixo, você encontrará dois comandos que ilustrarão o problema e que você poderá "praticar". Inicie o cursor imediatamente antes de echo e arraste até o destaque ficar 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 imediatamente antes de echo e arraste para baixo até que o cursor esteja na segunda linha, mas fique bem na frente da seta <- . Copie e cole 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 selecionado tenha passado por duas linhas. Mas quando você colá-lo no terminal, você verá que ele executa a linha, porque encontrou um caractere RETURN no texto copiado.

    
por 22.10.2015 / 11:30
10

Quando você seleciona texto, se incluir a 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 tecla Enter "valida" a tela copiando todas as alterações no host.

    
por 22.10.2015 / 11:30
2

As outras respostas responderam bem à pergunta, mas eu pensei em também compartilhar uma solução para evitar que isso aconteça acidentalmente se você estiver usando o PuTTY no Windows - consulte link para detalhes.

    
por 23.10.2015 / 00:38
2

What triggers this behavior?

O caractere de nova linha.

    
por 23.10.2015 / 04:36