Como bifurcar um comando “cat”?

Como bifurcar um comando “cat”?

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. arquivo

mas quando executado via linha de comando .. tudo está escrito perfeitamente 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? tentei

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

isso não funcionou.

Responder1

Talvez este exemplo seja extremamente simplificado, mas estou tendo problemas para entender por que você não executaria:

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

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

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

Responder2

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

command << EOF &
blah blah
EOF

Neste caso específico, não vejo qual é o sentido. Você já redirecionou stdout para a.txt, por que deseja redirecioná-lo para /dev/null ao mesmo tempo?

Responder3

Eu acho que você deveria fazer:

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

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

Quando você:

cat <file 

...ou...

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

Você acabou de copiar cata entrada padrão para a saída padrão. Então, neste cenário:

<<FILE
    `cat <file`
FILE

<<FILEe <filesão idênticos.

informação relacionada