Это мой 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
идентичны.