¿Existe un solo comando de shell que hará lo siguiente:

cp header page.html
markdown page.md >> page.html
cat footer >> page.html

(Markdown sale a stdout de forma predeterminada).

Un colega sugirió

echo $(cat header) $(markdown page.md) $(cat footer) >> page.html

Pero aparte de tres subcapas y dos gatos, que probablemente me ganen un premio por "uso inútil de gato", también elimina las nuevas líneas, lo que no es bueno, especialmente en los bloques <pre><code>.

Lo que me gustaría es algo como esto (que obviamente no funciona)

cat header $(markdown page.md) footer > page.html

Donde puedo decirle a cat que use la salida de la subcapa para leer uno de los archivos. Idealmente, sin configurar archivos temporales, canalizaciones con nombre, etc.

2
Bristol 18 ago. 2016 a las 12:57

2 respuestas

La mejor respuesta

Como solo tiene una subcapa, usaría esto:

markdown page.md | cat header - footer > page.html

El - en los parámetros cat se refiere a stdin, que se completa con el comando markdown.

Si tuviera varias subcapas, le recomendaría usar la solución sobre la que anishane comentó, sustitución de procesos:

cat header <(markdown page1.md) <(markdwon page2.md) footer > page.html
6
Aaron 18 ago. 2016 a las 11:51

Eso debería hacer:

(cat header;  markdown page.md;  cat footer) >   page.html
1
Tiago Lopo 18 ago. 2016 a las 10:02