我想在shell脚本中包含一些HTML。这就是我尝试过的:
(
echo "<html>
<head>
<title>HTML E-mail</title>
</head>
<body>
<p style="font-family:verdana;color:red;">
This text is in Verdana and red</p>
</body>
</html>"
)>pkll.htm
但是,它不是将HTML写入文件,而是给我一些错误:
> bash: color:red: command not found bash: > This text is in Verdana and
> red</p </body> </html>: No such file or directory
我怎样才能做到这一点?
更好的选择是使用here文档语法(请参阅this answer):
cat << 'EOF' > pkll.htm
<html>
<head>
<title>HTML E-mail</title>
</head>
<body>
<p style="font-family:verdana;color:red;">
This text is in Verdana and red
</p>
</body>
</html>
EOF
您的尝试失败,因为HTML中的双引号终止了您缠绕它的双引号并导致<>
s被视为重定向,而;
s则终止echo
命令。
你可以在技术上使用单引号:
(
echo '<html>
<head>
<title>HTML E-mail</title>
etc ...'
)>pkll.htm
但是如果HTML包含'
,例如撇号或属性,那么你又会遇到同样的问题。这里的文件没有这样的问题。
你需要在html中转义引号,因为你在echo的参数开头有一个引用。
您的终端将其解释为
<html>...<p style="
第一个论点
font-family:verdana;
作为第二个参数,其余命令作为其他命令,因为你有一个分号。
所以你需要将p标签替换成
<p style=\"font-family:verdana;color:red;\">
阅读Advanced Bash-Scripting Guide第19章。这里的文档。 http://tldp.org/LDP/abs/html/here-docs.html
cat << 'EOF' > pkll.htm
<html>
<head>
<title>HTML E-mail</title>
</head>
<body>
<p style="font-family:verdana;color:red;">
This text is in Verdana and red</p>
</body>
</html>
EOF
您可以使用在线工具执行相同的操作: