не работает
Выпуск
В bash вывод выполняется в 1 строке от команды, поэтому <pre>
не работает в теге html
.
log=`cat ../local/log/$(ls -t ../local/log | head -1 )`
echo '
<tr style="background-color: rgb(250,240,240);">
<td style="padding: 10px; text-align: center;"><pre>'$log'</pre></td>
</tr>
' > itf-check-article.html
Как я могу получить вывод в переменную как классический построчно, а не в одну строку?
Спасибо.
Update.
Command.
log=`cat ../local/log/$(ls -t ../local/log | head -1 )`; echo $log.
Выход (1 строка).
Start of processing orders. 0 order(s) in this run. No orders in this run
Но эта команда показывает мне это (с 2 строками).
itfstage@vm14258:~/sofimon$ cat ../local/log/UNIHOBBY_ITF_ORDERS.log
Start of processing orders. 0 order(s) in this run.
No orders in this run
itfstage@vm14258:~/sofimon$
Когда переменная Bash содержит несколько строк, и Вы хотите произвести ее с echo
, как это; необходимо поместить двойные кавычки ("
) вокруг переменной. Например:
echo '
.......<pre>
'"$log"'
</pre>...
' > ...
при помещении двойных кавычек, эти echo
, команда будет считать это как единственным (чье содержание, оказывается, содержит многострочную строку), параметр. Если Вы не поместите двойные кавычки, то содержание строки будет разделено (Bash) в несколько параметров каждый раз, когда пробел (пространство, вкладка, новая строка, и т.д.) происходит.
, Например:
$ var='a b c'
$ echo $var
a b c
$ echo "$var"
a b c
Примечание, первое echo
получит три параметра ('a'
, 'b'
, и 'c'
) и произведет их путем разделения с единственный пространство. Второе echo
получит единственный параметр ('a b c'
) и произведет его как есть
Ваш предварительный тег хорошо работает. Ваша проблема состоит в том, что $log содержит вывод кошки на одной строке. Вместо того, чтобы пытаться зафиксировать это, я предположил бы, что Вы разделяете этот код на более простые шаги.
, В первую очередь, эта строка:
log=`cat ../local/log/$(ls -t ../local/log | head -1 )`
путь к сложному, потому что он вкладывает две замены команды с двумя различными синтаксисами. Вы могли бы понять это сегодня, но почему бы не разделить это на два шага, таким образом, Вы или один из Ваших коллег поймете это год с этого времени:
logfile=../local/log/$(ls -t ../local/log | head -1)
logtext=$(cat $logfile)
Или еще лучше (принимающий файлы журнала заканчиваются в .log):
logfile=$(ls -t ../local/log/*.log | head -1)
logtext=$(cat $logfile)
Теперь Вы видите, что просто помещаете содержание $logile в $logtext. Вы, кажется, хотите произвести содержание $logfile между предварительными тегами, точно так же, как это появляется в файле. С упрощенными командами выше, может казаться очевидным, что помещение его в $logtext является дополнительным шагом, который даже не необходим. Всего cat
файл, где Вы хотите, чтобы это появилось. Обратные галочки или $ () - конструкция предназначена для питания одной команды с аргументами, которые создаются из вывода другого. В этом случае это просто портит все это.
Поэтому то, что Вы могли сделать, является этим:
outputfile=itf-check-article.html
logfile=$(ls -t ../local/log/*.log | head -1)
echo '<tr style="background-color: rgb(250,240,240);">' > $outputfile
echo '<td style="padding: 10px; text-align: center;"><pre>' >> $outputfile
cat $logfile >> $outputfile
echo '</pre></td></tr>' >> $outputfile
или просто выполненный команды между скобками ()
для запуска подоболочки с одного оператора перенаправления вместо этого:
outputfile=itf-check-article.html
logfile=$(ls -t ../local/log/*.log | head -1)
(
echo '<tr style="background-color: rgb(250,240,240);">'
echo '<td style="padding: 10px; text-align: center;"><pre>'
cat $logfile
echo '</pre></td></tr>'
) > $outputfile
#!/bin/bash
cat > itf-check-article.html <<PRE
<tr style="background-color: rgb(250,240,240);">
<td style="padding: 10px; text-align: center;"><pre>$(awk '{printf "%s<br/>",$0}' $(ls -td ../local/log/* | head -n 1))</pre></td>
</tr>
PRE
вывод:
$ cat itf-check-article.html
<tr style="background-color: rgb(250,240,240);">
<td style="padding: 10px; text-align: center;"><pre>Start of processing orders. 0 order(s) in this run.<br/>No orders in this run<br/></pre></td>
</tr>
#!/bin/bash
declare html
html+='<tr style="background-color: rgb(250,240,240);">\n'
html+='<td style="padding: 10px; text-align: center;"><pre>'
html+=$(awk '{printf "%s<br/>",$0}' $(ls -td ../local/log/* | head -n 1))
html+='</pre></td>\n'
html+='</tr>'
echo -e "$html" > itf-check-article.html