首页 > 解决方案 > 如何在命令行中将字符串添加到标准输入?

问题描述

这可能是非常基本的,但我正在努力使用命令行。假设我想将 markdown 文件 myDoc.md 转换为 pdf 文件。Markedjs提供了一个命令行工具,可以将markdown转为html,而wkhtmltopdf可以将html转为pdf,所以我有命令

marked myDoc.md | wkhtmltopdf - myDoc.pdf

那行得通,它会生成pdf。但是 pdf 非常难看,我想在将它传递给 wkhtmltopdf 之前在 html 中添加一个样式部分。是的,我可以将样式部分放在降价文档中,但我不想用这个污染标记。我想使用标记来生成 html,然后添加一个样式部分,然后将其提供给 wkhtmltopdf,而无需清理任何中间文件。像这样的伪代码

myStyle="<style>
*{
    font-family: arial;
}
h1{
    text-align:center;
}
</style>"
marked myDoc.md | concatenatestrings myStyle - | wkhtmltopdf - myDoc.pdf

但是我遇到麻烦的地方是我不知道如何处理多行字符串myStyle并找到可以执行假设concatenatestrings命令的操作,从标准输入获取字符串,添加 myStyle,然后输出到标准输出。

标签: command-line

解决方案


我会使用模板文件,然后使用子外壳将模板和输出输出marked myDoc.md到标准输出,然后将结果通过管道传输到链的其余部分。

所以,让我们创建模板文件...

template.html

<style>
*{
    font-family: arial;
}
h1{
    text-align:center;
}
</style>

...并使用它

$ (cat template.html && marked myDoc.md) | wkhtmltopdf - myDoc.pdf

我没有用你的命令测试过这个(我不想安装marked只是为了测试它),但是用下面的命令测试了它......

$ (echo ree && echo cola) | cat
ree
cola

推荐阅读