@kirill-93

Как в bash создать файл с контентом, если его нет?

Здравствуйте, нужно через sh создать несколько файлов, если их нет. Пробую так:
if [ ! -f "/folder/file1.html" ]; then
cat > folder/file1.html << EOF
...........
EOF
fi

if [ ! -f "/folder2/file2.html" ]; then
cat > folder2/file2.html << EOF
...........
EOF
fi

В итоге он записывает первый файл, но в содержимое кладет
" ...........
EOF
fi

if [ ! -f "/folder2/file2.html" ]; then
cat > folder2/file2.html << EOF
..........."
то есть не видит конца первого файла, а заканчивает там, где заканчивается содержимое второго? Как из разъединить?
  • Вопрос задан
  • 6106 просмотров
Решения вопроса 3
@ldvldv
1. Ваш скрипт работает нормально, если скопировать его с этой странички. Если добавить пробел после второго EOF
if [ ! -f "/folder/file1.html" ]; then
cat > folder/file1.html << EOF
...........
EOF<здесь пробел>
fi
то получается ваша ошибка

2.
cat > folder2/file2.html << EOF
лучше заменить на
cat > /folder2/file2.html << EOF
Ответ написан
Комментировать
sim3x
@sim3x
Вопрос стоит исправить -- не понятно в чем проблема

не известно есть файл или его нет?
touch filename
создаст файл, если его нет, и не изменит содержимое файла, если он есть
Ответ написан
Комментировать
@kirill-93 Автор вопроса
if [ ! -f "/kernel/wbs.xml" ]; then
   cat > kernel/wbs.xml << EOF
   <WBS VERSION="305" UPDATEDATE="">
       <LANGUAGES>
           <LANGUAGE ID="rus" NAME="Russian"/>
           <LANGUAGE ID="eng" NAME="English"/>
       </LANGUAGES>
       <EMAIL ENABLED="1" ROBOTEMAIL=""/>
       <HTML_SETTINGS HTTPS_PORT="443" SESSION_TIMEOUT="60"/>
       <DIRECTORIES>
           <DATA_DIRECTORY PATH="[WBS_PATH]/data"/>
           <WEB_DIRECTORY PATH="/"/>
       </DIRECTORIES>
       <SQLSERVERS>
           <SQLSERVER HOST="localhost" PORT="" DBCHARSET="UTF8" WEBASYST_HOST="" ADMIN_USERNAME=""
                      ADMIN_ADMINRIGHTS="FALSE" NAME="localhost" ADMIN_PASSWORD="">
               <LANGUAGES>
                   <LANGUAGE ID="rus" NAME="Russian"/>
                   <LANGUAGE ID="eng" NAME="English"/>
               </LANGUAGES>
           </SQLSERVER>
       </SQLSERVERS>
       <FRONTEND type="SC" dbkey="" mod_rewrite="" disable_powered_by="1"/>
       <SYSTEM COMPANY="" LICENSE="" MEMLIMIT=""/>
       <SERVER_TIME_ZONE ENABLE="1" ID="24" SERVER_TIME_ZONE_DST="0"/>
       <PROXY host="" port="" user="" password=""/>
       <SMTP_SERVER host="" port="" user="" password="" helo=""/>
   </WBS>
   EOF
fi


if [ ! -f "/dblist/OFFICE360.xml" ]; then
cat > dblist/OFFICE360.xml << EOF
<DATABASE>
    <DBSETTINGS SIGNUP_DATETIME="" CREATE_DATE="" DEFAULT_ENCODING="" EXPIRE_DATE="" READONLY="0" DATE_FORMAT="DD.MM.YYYY" DBSIZE_LIMIT="" FIRSTLOGIN="1" MAX_USER_COUNT="" SQLSERVER="localhost" DB_NAME="test" DB_PASSWORD="root" DB_USER="root" SOURCE="" DB_CREATE_OPTION="use" TEMPORARY="" MYSQL_CHARSET="UTF8" PLAN="" FREE_APPS="" RECIPIENTS_LIMIT="" SMS_RECIPIENTS_LIMIT=""/>

    <ADMINISTRATOR PASSWORD="" TEMPLATE="classic" LANGUAGE="rus"/>
    <FIRSTLOGIN COMPANYNAME="" FIRSTNAME="Artem" LASTNAME="" LOGINNAME="" PASSWORD="" TEMPLATE="classic" LANGUAGE="eng" EMAIL=""/>
    <APPLICATIONS>
        <APPLICATION APP_ID="SC"/>
    </APPLICATIONS>
    <MODULES>

    <ASSIGN CLASS="sms" ID="" DISABLED="1"/></MODULES>
    <BALANCE>
        <VALUE ID="sms" VALUE="UNLIMITED"/>
    </BALANCE>
    <VERSIONS SYSTEM="305" SC="305"/>
    <ADVSETTINGS>
        <PARAM name="show_company_top" value="yes"/>
        <PARAM name="show_company_name_top" value="yes"/>
        <PARAM name="theme" value="1albino"/>
        <PARAM name="company_name" value=""/>
    </ADVSETTINGS>
</DATABASE>
EOF
fi

Вот настоящий запрос. Пробелом там нет.
А если через touch, как создать вместе с содержимым?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы