我即將在php中生成大量調查。壞取代Bash:如何將heredoc寫入動態創建的文件(變量)?
我使用Bash添加某種自動化與cat
命令。所以我使用Bash生成.php
文件。
要添加新的調查,我的Bash腳本使用filecount='ls -l ${survey_dir}${survey_category} | wc -l'
統計調查目錄中的文件。我想用filecount
來生成下一個調查的文件名。所以如果survey_category
目錄有兩個文件,新文件名將是3.php
。
開始定界符之前,我發出以下變量和命令:
filecount=$((filecount+1))
newfile="${wd}${catg}/${filecount}.php"
cat > ${newfile} <<-EOF
...
EOF
當我執行命令cat
產生錯誤消息「壞替代」的腳本。
我試圖通過引用<<-EOF
來解決這個問題:像<<-'EOF'
,但是我在php中使用了很多變量替換,所以這個解決方案無法實現。
我檢查了是否ls -l /bin/bash
實際上鍊接到bash
而不是dash
或另一個sh
殼。
我檢查了我的'shebang'是#!/bin/bash
而不是#!/bin/sh
。檢查確定。
此外,我試圖在變量${newfile}
上使用單引號和雙引號:無濟於事。
調試信息#!/bin/bash -x
:
: bad substitution
+ [[ 1: == \2\: ]]
+ [[ 1: == \3\: ]]
+ [[ 1: == \4\: ]]
我的問題是:如何編寫定界符動態創建的文件?
代碼導致該問題:
echo -e "Your question please:"
read -e rvraag
rvraag="${rvraag//\"/\^}"
salt=`date +"%s"`
filecount=`ls -l ${wd}${catg} | wc -l`
filecount=$((filecount+1))
newfile="${wd}${catg}/${filecount}.php"
cat > ${newfile} <<-EOF
<?php
session_start();
\$st_code =\$_SESSION['studentnr'];
\$cursuscode ="${catg}";
\$rdir="/var/www/qqlq.org/www/gen_enq/";
require_once \$rdir.'/inc/error_reporting.inc';
require_once \$rdir.'/src/clsQuestionProgress.class.php';
\$myQuestionProgress = new clsQuestionProgress();
\$myQuestionProgress->fCreateQuestionProgress(\$st_code, \$cursuscode);
require_once \$rdir.'/inc/header.inc';
require_once \$rdir.'/src/clsWriteProgress.class.php';
echo "<div class='container'><hr>
Vraag ${catg} ${filecount}<h4> ${rvraag}</h4><br><br>
<form name='qradio' action =".\$_SERVER['PHP_SELF']." method= 'POST'>
<div class='radio'><label><input type='radio' name='${catg}${salt}'
value='1'>${answ1}<label></div>
<div class='radio'><label><input type='radio' name='${catg}${salt}' value='2'>${answ2}<label></div>
<div class='radio'><label><input type='radio' name='${catg}${salt}' value='3'>${answ3}<label></div>
<div class='radio'><label><input type='radio' name='${catg}${salt}' value='4'>${answ4}<label></div>
<input type='submit' class='btn btn-warning' name='btnCancel${salt}' value='Go Back'>
<input type='submit' class='btn btn-success' name='btn${catg}${salt}' value='Ok'>
</form>
<hr></div>";
if ( \$_POST['${catg}${salt}'] == "${answok}" && isset($_POST['btn${catg}${salt}'])){
\$myProgress = new clsWriteProgress();
\$tablename = 'q'.\$st_code.\$cursuscode;
\$myProgress->fSetProgress(\$tablename, \$_SESSION["leerjaar"],$st_code,\$cursuscode,"${rvraag}",1);
\$nextpage=${filecount)+1;
echo '<script>location.replace("'.\${nextpage}.php.'");</script>';
}//end if
if ( \$_POST['${catg}${salt}'] !== "${answok}" && isset(\$_POST['btn${catg}${salt}'])){
\$tablename = 'q'.\$st_code.\$cursuscode;
\$myProgress = new clsWriteProgress();
\$myProgress->fSetProgress(\$tablename, \$_SESSION["leerjaar"],\$st_code,\$cursuscode,"${rvraag}",0);
\$nextpage=${filecount)+1;
echo '<script>location.replace("'.${nextpage}.php.'");</script>';
}//end if
if (isset(\$_POST['btnCancel${salt}'])){
echo '<script>location.replace("../../studyoverview.php");</script>';
}//end if
EOF
這是懷疑 - 'cat> $ {newfile} << - EOF' - 刪除破折號 –
@Ed Heal:當我刪除破折號時出現錯誤消息:'警告:這裏 - 文檔在第57行(通緝'EOF')'。我需要短劃線跳過腳本中的標籤.. – kzpm
你能發佈整個代碼嗎?刪除短跑不應導致這樣的錯誤。 – nsilent22