¿Cómo bifurcar un comando "gato"?

¿Cómo bifurcar un comando "gato"?

Este es mi script bash.

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

simplemente lee /etc/httpd/conf/httpd.conf y lo escribe en /a.txt, el problema ha sido cuando esto se ejecuta a través de scripts web con el comando sudo... por alguna razón no todo está escrito en a.txt archivo

pero cuando se ejecuta a través de la línea de comando... todo se escribe bien en un.txt

Entonces quizás debería enviar esto a un proceso en segundo plano agregando:

> /dev/null 2>&1

lo. ¿Pero, cómo se puede hacer esto? Lo intenté

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

esto no funcionó.

Respuesta1

Tal vez este ejemplo esté extremadamente simplificado, pero me cuesta entender por qué no ejecutarías simplemente:

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

Es decir, ya existe un comando que simplemente lee un archivo y crea otro con su contenido y se llama cp. La única diferencia real sería si /a.txtya existiera y estuvieras intentando conservar sus permisos, o algo así, pero incluso entonces, simplemente querrías hacer:

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

Respuesta2

Para ejecutar un comando con un HERE-DOC en segundo plano, especifique &en la primera línea:

command << EOF &
blah blah
EOF

En este caso particular, no veo cuál es el punto. Ya redirige la salida estándar a a.txt, ¿por qué desea redirigirla a /dev/null al mismo tiempo?

Respuesta3

Creo que deberías hacer:

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

Por más que lo intenté, no veo que el código de su pregunta deba tener algún otro efecto.

Cuando usted:

cat <file 

...o...

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

Simplemente copie catla entrada estándar de 's a su salida estándar. Entonces en este escenario:

<<FILE
    `cat <file`
FILE

<<FILEy <fileson identicos.

información relacionada