O que o EOF faz?

4

Eu sou um novato no Linux. Enquanto estou aprendendo o GDB para depurar meu código, preciso criar um arquivo input.txt para o meu programa ler. Conheço símbolos de redirecionamento, como >, >> and < , mas não consegui encontrar informações sobre o << no Google desde que o Google o ignora. Alguém poderia explicar o que o <<EOF faz abaixo? Obrigado.

cat >input.txt <<EOF
    
por LED Fantom 22.11.2015 / 01:18

1 resposta

6

Um trecho do artigo :

Aqui Documento

Um documento aqui é usado para redirecionar a entrada para um script ou programa de shell interativo.

Podemos executar um programa interativo em um script de shell sem ação do usuário, fornecendo a entrada necessária para o programa interativo ou script de shell interativo.

A forma geral para um documento aqui é -

comando << delimiter documento delimitador Aqui, o shell interpreta o operador << como uma instrução para ler a entrada até encontrar uma linha contendo o delimitador especificado. Todas as linhas de entrada até a linha contendo o delimitador são então alimentadas na entrada padrão do comando.

O delimitador informa ao shell que o documento aqui foi concluído. Sem ele, o shell continua a ler a entrada para sempre. O delimitador deve ser uma única palavra que não contenha espaços ou tabulações.

A seguir, a entrada para o comando wc -l para contar o número total de linhas -

$wc -l << EOF
    This is a simple lookup program 
    for good (and bad) restaurants
    in Cape Town.
EOF
3
$

Você pode usar o documento aqui para imprimir várias linhas usando seu script da seguinte forma:

#!/bin/sh

cat << EOF
This is a simple lookup program 
for good (and bad) restaurants
in Cape Town.
EOF 

Isso produziria o seguinte resultado -

Este é um programa de pesquisa simples para bons (e ruins) restaurantes na Cidade do Cabo. O script a seguir executa uma sessão com o editor de texto vi e salva a entrada no arquivo test.txt.

#!/bin/sh

filename=test.txt
vi $filename <<EndOfCommands
i
This file was created automatically from
a shell script
^[
ZZ
EndOfCommands

Se você executar este script com vim agindo como vi , provavelmente verá a saída como a seguir -

$ sh test.sh
Vim: Warning: Input is not from a terminal
$

Depois de executar o script, você deverá ver o seguinte incluído no arquivo test.txt -

$ cat test.txt
This file was created automatically from
a shell script
$
    
por 22.11.2015 / 01:24