问题
在 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
如何逐行而不是一行地将输出作为经典变量输出?
谢谢。
更新。
命令。
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
命令会将其视为单个(其内容恰好包含多行字符串)参数。如果您不使用双引号,则每当出现空格(空格、制表符、换行符等)时,字符串的内容将(通过 Bash)拆分为多个参数。例如:
请注意,第一个
echo
将获取三个参数('a'
、'b'
和),并将通过用单个空格'c'
分隔来输出它们。第二个将获得一个参数 ( ) 并按原样输出。echo
'a b c'
专用代码块(此处为 doc)。
输出:
使用 += 运算符附加到变量。
您的预标记工作正常。您的问题是 $log 在一行中包含 cat 的输出。我建议您将此代码拆分为更简单的步骤,而不是尝试解决此问题。
首先,这一行:
很复杂,因为它嵌套了两个具有两种不同语法的命令替换。您今天可能会理解,但为什么不将其分为两个步骤,以便您或您的一位同事在一年后理解它:
甚至更好(假设日志文件以 .log 结尾):
现在您看到您只是将 $logile 的内容放入 $logtext 中。您似乎想在 pre-tags 之间输出 $logfile 的内容,就像它出现在文件中一样。使用上面的简化命令,很明显将其放入 $logtext 是一个甚至不需要的额外步骤。只是
cat
您希望它出现的文件。反引号或 $() 结构旨在为一个命令提供从另一个命令的输出创建的参数。在这种情况下,这一切都搞砸了。所以你可以做的是:
或者简单地运行括号之间的命令
()
以使用一个重定向语句启动子shell: