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.txt
ya 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 cat
la entrada estándar de 's a su salida estándar. Entonces en este escenario:
<<FILE
`cat <file`
FILE
<<FILE
y <file
son identicos.