Форматирование html сценария оболочки busybox для Linux

У меня проблема со сценарием оболочки, и я надеюсь, что вы можете помочь. Я хочу оптимизировать форматирование HTML следующего кода:

#! /bin/sh

cat <<EOF > myfile # temporary file
#! /bin/sh

echo -e "Content-type: text/html; charset=iso-8859-1\n\n"
echo -e "<html><head>\c"
echo -e "<title></title>"
echo -e "</head>"
echo -e "<body>\c"
echo -e "<p>Text</p>"
echo -e "</body></html>"

EOF
chmod 777 myfile
mount -o bind myfile myfile # mount temporary on the original myfile
rm myfile

Я удалил echo -e и двойные кавычки. Я тоже пробовал это:

#! /bin/sh

cat <<EOF > myfile # temporary file
#! /bin/sh

echo -e '
<html>
    <head>
        <title></title>
    </head>
        <body>
            <p>Text</p>
        </body>
</html>
'

EOF
chmod 777 myfile
mount -o bind myfile myfile # mount temporary on the original myfile
rm myfile

Что не так со сценарием?

Примечание. Приведенный выше код является содержимым файла .cfg, который загружается при каждой перезагрузке. Затем файл .cfg вставляет содержимое между маркерами EOF в myfile, который является сценарием CGI.

Может ли это быть проблема?


person Christian Heinrichs    schedule 18.07.2013    source источник
comment
Спасибо людям, которые пытались помочь. Я должен был вначале прояснить вопрос, потому что это немного сбивало с толку. Проблема решена.   -  person Christian Heinrichs    schedule 05.08.2013


Ответы (4)


Не нужно использовать echo -e и кавычки,

cat << eof > shellhtml.htm
<html>
</html>
eof

Это работает.

person Karthikeyan    schedule 18.07.2013

Добавьте! # / Bin / sh вверху и удалите строку, начинающуюся с echo e, и строку с одинарной кавычкой перед EOF. Тогда ваш html будет правильно доставлен в myfile.

Итак, правильный сценарий оболочки будет: -

#!/bin/sh
cat <<EOF > myfile
 <html>
 <head>
 <title></title>
 </head>
     <body>
     <p>Text</p>
     </body>
 </html>
EOF
person Yehuda    schedule 18.07.2013
comment
Я пробовал этот, но он ничего не показывает на странице html, как с эхо. - person Christian Heinrichs; 19.07.2013
comment
Результат должен быть в файле с именем myfile. Для меня это работает отлично. - person Yehuda; 19.07.2013
comment
Это все еще не работает. В чем может быть проблема? Мне действительно нужен ответ на этот вопрос. - person Christian Heinrichs; 20.07.2013
comment
что вы видите в myfile после запуска? - person Yehuda; 21.07.2013
comment
Я использовал ваш код 4 разными способами. Я встроил его, и мой файл вернулся к значениям по умолчанию. Вставил его снова без вкладок, и myfile содержал ваш код, но страница html была пустой. В третий раз я написал только ваш код; myfile перешел в состояние по умолчанию. В четвертый раз я написал только ваш код без вкладок; myfile перешел в состояние по умолчанию. - person Christian Heinrichs; 21.07.2013
comment
что вы имеете в виду под переходом к дефолту? - person Yehuda; 21.07.2013
comment
Думаю, проблема в команде mount -o bind. Я не знаком с этой возможностью монтирования, есть ли причина, по которой вы ее используете, а не просто копируете или перемещаете файл на свое место? - person Yehuda; 21.07.2013
comment
myfile - это сценарий CGI (см. обновление 8) ссылка По умолчанию я имею в виду, что код внутри myfile сбрасывается сам, вместо того, чтобы применять мой код. Я использую команду mount, потому что заменить файлы в этой папке довольно сложно. - person Christian Heinrichs; 22.07.2013

Очень близко :-) Вам не нужен echo.

#! /bin/sh 
cat <<EOF > myfile
<html>
    <head>
    <title></title>
    </head>
        <body>
        <p>Text</p>
        </body>
</html>
EOF
person shellter    schedule 18.07.2013

Я наконец нашел решение:

#! /bin/sh

cat <<EOF > myfile # temporary file
#! /bin/sh

echo -e "Content-type: text/html; charset=iso-8859-1"
echo -e "
<html>
    <head>
        <title></title>
    </head>
        <body>
            <p>Text</p>
        </body>
</html>\c"

EOF

chmod 777 myfile
mount -o bind myfile myfile # mount temporary on the original myfile
rm myfile

Оболочка busybox некорректно отображала вставленные вкладки в редакторе vi, поэтому я использовал команду set: noai Vim.
set: noai решил проблему с вкладками, но после HTML-кода была эта дополнительная строка.
Решение для этого использовался escape-символ \c.

Если у кого-то есть лучший ответ, не стесняйтесь размещать его.

person Christian Heinrichs    schedule 29.07.2013