Как создать ответвление команды «cat»?

Как создать ответвление команды «cat»?

Это мой bash-скрипт.

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

он просто считывает /etc/httpd/conf/httpd.conf и записывает его в /a.txt, проблема возникает, когда это выполняется через веб-скрипты с командой sudo... по какой-то причине не все записывается в файл a.txt

но при запуске через командную строку... все прекрасно записывается в a.txt

поэтому, возможно, мне следует отправить это в фоновый процесс, добавив:

> /dev/null 2>&1

к нему. но как это можно сделать? я пробовал

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

это не сработало.

решение1

Возможно, этот пример слишком упрощен, но мне сложно понять, почему бы просто не выполнить:

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

То есть, уже есть команда, которая просто считывает один файл и создает другой с его содержимым, и она называется cp. Единственная реальная разница была бы, если бы /a.txtона уже существовала и вы пытались бы сохранить ее разрешения или что-то в этом роде - но даже в этом случае вам бы хотелось просто сделать:

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

решение2

Чтобы запустить команду с HERE-DOC в фоновом режиме, укажите &в первой строке:

command << EOF &
blah blah
EOF

В данном конкретном случае я не вижу смысла. Вы уже перенаправляете stdout в a.txt, зачем вы хотите одновременно перенаправить его в /dev/null?

решение3

Я думаю, вам следует сделать:

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

Как я ни стараюсь, я не вижу, чтобы код в вашем вопросе имел какой-либо другой эффект.

Когда ты:

cat <file 

...или...

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

Вы просто копируете catстандартный вход в его стандартный выход. Так что в этом сценарии:

<<FILE
    `cat <file`
FILE

<<FILEи <fileидентичны.

Связанный контент