Como forçar um comando “cat”?

0

Este é o meu script bash.

#!/bin/bash
oo="'cat /etc/httpd/conf/httpd.conf'";
cat > /a.txt << EOF
$oo
EOF

ele simplesmente lê /etc/httpd/conf/httpd.conf e grava em /a.txt, o problema é quando isso é executado via scripts da web com o comando sudo .. por algum motivo, nem tudo é gravado no arquivo a.txt

mas quando executado via linha de comando ... tudo está bem escrito em a.txt

então talvez eu deva enviar isso para um processo em segundo plano adicionando:

> /dev/null 2>&1

para isso. Mas como isso pode ser feito? eu tentei

#!/bin/bash
oo="'cat /etc/httpd/conf/httpd.conf'";
cat > /a.txt << EOF
$oo
EOF > /dev/null 2>&1

isso não funcionou.

    
por user72685 17.06.2014 / 23:51

3 respostas

1

Talvez este exemplo seja extremamente simplificado, mas estou com dificuldades para ver por que você não executaria:

cp /etc/httpd/conf/httpd.conf /a.txt

Isto é, já existe um comando que simplesmente lê de um arquivo e cria outro com seu conteúdo, e é chamado de cp . A única diferença real seria se /a.txt já existisse e você estivesse tentando manter suas permissões, ou algo assim - mas, mesmo assim, você gostaria de apenas fazer:

cat /etc/httpd/conf/httpd.conf >/a.txt
    
por 18.06.2014 / 00:23
0

Para executar um comando com um HERE-DOC em segundo plano, especifique & na primeira linha:

command << EOF &
blah blah
EOF

Neste caso particular, não vejo qual é o ponto. Você já redireciona stdout para a.txt, por que você quer redirecioná-lo para / dev / null ao mesmo tempo?

    
por 17.06.2014 / 23:56
0

Eu acho que você deveria fazer:

cat </etc/httpd/conf/httpd.conf >/a.txt

Por mais que eu tente, não consigo ver que o código da sua pergunta tenha qualquer outro efeito.

Quando você:

cat <file 

... ou ...

cat <<FILE
    $(shell generated file contents)
FILE

Você acabou de copiar o padrão de cat para o seu padrão. Então, neste cenário:

<<FILE
    'cat <file'
FILE

<<FILE e <file são idênticos.

    
por 18.06.2014 / 00:22

Tags