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.txt
já 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 cat
a entrada padrão para a saída padrão. Então, neste cenário:
<<FILE
`cat <file`
FILE
<<FILE
e <file
são idênticos.