comando “cat”: como escapar automaticamente de tudo que possa ser uma violação?

3

Se você copiar o conteúdo de

httpd.conf

e, em seguida, cole-o em um comando cat .. como este ..

#!/bin/bash
cat > /test << EOF
pasted here..
EOF

você encontra esse erro:

-bash: command substitution: line 1: unexpected EOF while looking for matching '''
-bash: command substitution: line 4: syntax error: unexpected end of file

talvez a solução seja escapar dos cifrões e talvez até citações e assim por diante.

mas dado que este é um ficheiro tão grande ... os sinais de cifrão podem ser automaticamente ignorados?

é minha única opção para escapar deles através de outro programa e depois entregá-lo ao comando cat?

    
por user72685 21.06.2014 / 08:40

2 respostas

3

Compare os dois documentos aqui no exemplo a seguir:

(yeti@darkstar:6)~/wrk/tmp$ cat ./xyzzy 
#!/bin/bash
cat << EOF
Version 1 - Today is $(date)
EOF
cat << 'EOF'
Version 2 - Today is $(date)
EOF
(yeti@darkstar:6)~/wrk/tmp$ ./xyzzy 
Version 1 - Today is Sa 21. Jun 08:51:38 CEST 2014
Version 2 - Today is $(date)
    
por 21.06.2014 / 08:53
5

Use aspas ao redor da string "EOF":

cat > /test <<'EOF'
stuff $(pwd)
EOF

saídas

stuff $(pwd)

literalmente.

Consulte o manual do bash em heredocs. Quaisquer citações na string terminator impedem quaisquer expansões e substituições no corpo.

    
por 21.06.2014 / 08:49