Bash, команда для переменной (cat), вывод в 1 строку,
 не работает

Выпуск

В 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$ 
2
задан 30 September 2019 в 12:16

3 ответа

Когда переменная 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') и произведет его как есть

2
ответ дан 23 October 2019 в 09:56

Ваш предварительный тег хорошо работает. Ваша проблема состоит в том, что $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
0
ответ дан 23 October 2019 в 09:56

блок кода специального назначения (здесь документ).

#!/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
0
ответ дан 23 October 2019 в 09:56

Другие вопросы по тегам:

Похожие вопросы: