🐇 La Madriguera del Conejito

Servidores y Linux desde la madriguera 🐧

BashBlog: Un script en Bash para crear blogs

junio 14, 2026 — Ricardo García Jiménez

En 2020 leí un artículo de Victorhck donde mostraba el uso de una herramienta para crear blogs utilizando un script en Bash, y desde ese entonces siempre me pareció interesante. Durante ese tiempo me daba vueltas en mi mente la idea de abrir un blog personal donde pudiera escribir y guardar simplemente mis notas o bitácoras de herramientas que voy descubriendo y aprendiendo a utilizar en Linux. Hasta este año, por fin me animé a dar el paso y crear este blog para que de alguna manera, ir organizando en este espacio todas esas lluvias de notas que he ido escribiendo, y se me ocurrió comenzar publicando mis notas sobre esta misma herramienta que me permitió abrir mi blog.


Instalación

Clona el repositorio:

git clone https://github.com/cfenollosa/bashblog.git
cd bashblog

Otorga permisos de ejecución y cópialo para tenerlo disponible en todo el sistema:

chmod 755 bb.sh
sudo cp bb.sh /usr/local/bin

Si tienes en mente escribir todas tus publicaciones en Markdown, debes instalar un programa que convierta Markdown a HTML (por ejemplo: Markdown.pl, markdown, smu).

Configuración

Puedes modificar directamente las variables de configuración dentro de la función global_variables() en el script, o crear un archivo .config en el directorio donde vivirán todas las publicaciones de tu blog.

Aquí se listan y explican las variables que puedes configurar:

Variable Descripción
global_title Título del blog.
global_description Descripción o subtítulo del blog.
global_url URL pública del blog (sin barra al final).
global_author Nombre del autor principal del blog.
global_author_url URL del perfil, repositorio o sitio web del autor.
global_email Correo electrónico del autor.
global_license Licencia del contenido del blog.
global_analytics ID de Google Analytics (ej. UA-XXXXX).
global_analytics_file Archivo con código personalizado para otros sistemas de analíticas o para el código Universal de Google Analytics.
global_feedburner URL de Feedburner para redirigir el feed RSS. Déjalo vacío para usar el feed local.
global_twitter_username Nombre de usuario de Twitter (sin la @) para el enlace de compartir y las menciones.
global_twitter_card_image URL absoluta de la imagen por defecto para las vistas previas (Twitter Cards) de los enlaces del blog.
global_twitter_cookieless Si es true, muestra un enlace simple para compartir (sin cookies ni scripts). Si es false, carga el widget oficial de Twitter con el contador de tweets.
global_disqus_username Nombre de usuario de tu cuenta de Disqus para habilitar los comentarios.
index_file Nombre del archivo de la página principal.
number_of_index_articles Número de posts que se mostrarán en la página principal.
archive_index Nombre del archivo que lista todos los posts.
tags_index Nombre del archivo que lista todas las etiquetas (tags).
non_blogpost_files Array de archivos HTML que BashBlog ignorará al generar la página principal y los feeds. Orientado a páginas estáticas que no son posts (ej. (about.html contact.html)).
blog_feed Nombre del archivo del feed RSS.
number_of_feed_articles Número de posts que se incluirán en el feed RSS.
cut_do Si es cut, se mostrará el contenido del post solo hasta la primera línea horizontal en la página principal y en el feed RSS. Si se deja vacío (""), se muestra el post completo.
cut_tags Si es yes y la opción anterior es cut, oculta las etiquetas del post en la página principal. Si es no, las etiquetas seguirán visibles aunque el texto esté cortado.
cut_line Expresión regular que indica la línea HTML donde se debe cortar el post.
save_markdown Si es yes, guarda el archivo Markdown (.md) original junto al archivo HTML (.html) generado. Si se deja vacío (""), se descarta el .md y solo se conserva el .html.
prefix_tags Prefijo de los archivos HTML generados para cada etiqueta (tag).
header_file Ruta a un archivo HTML con una cabecera <head> personalizada. Déjalo vacío para que BashBlog la genere automáticamente.
footer_file Ruta a un archivo HTML con un pie de página (footer) personalizado. Déjalo vacío para que BashBlog lo genere automáticamente.
body_begin_file Archivo HTML cuyo contenido se incrustará justo después de abrir la etiqueta <body>.
body_end_file Archivo HTML cuyo contenido se incrustará justo antes de cerrar la etiqueta </body>.
body_begin_file_index Similar a body_begin_file, pero su contenido solo se incrusta en la página principal (index.html).
css_include Array de archivos CSS que se enlazarán en todas las páginas (ej. (main.css blog.css)). Si se deja vacío, BashBlog generará uno por defecto.
html_exclude Array de archivos HTML que se excluirán de la página principal, del feed RSS y de los conteos de etiquetas. Útil para posts antiguos u obsoletos que no quieres que aparezcan en la portada.
template_comments Texto que aparece junto al enlace de Twitter (ej. ¿Comentarios?).
template_read_more Texto del enlace Leer más... que aparece cuando un post se corta en la página principal o en las páginas de etiquetas.
template_archive Texto del enlace para ir a la página de todos los posts al final de la página principal.
template_archive_title Título de la página que lista todos los posts.
template_tags_title Título de la página que lista todas las etiquetas.
template_tags_posts Palabra en plural para referirse a los posts (ej. artículos o posts).
template_tags_posts_2_4 Palabra en plural especial para lenguas eslavas (usada cuando hay entre 2 y 4 posts).
template_tags_posts_singular Palabra en singular para referirse a los posts (ej. artículo o post).
template_tag_title Texto para el <title> de las páginas de una etiqueta específica (ej. Artículos etiquetados con).
template_tags_line_header Texto que precede a la lista de etiquetas en un post (ej. Etiquetas:).
template_archive_index_page Texto del enlace para volver a la página principal desde las páginas de todos los posts y etiquetas.
template_subscribe Texto del enlace visible para suscribirse al feed RSS al final de la página principal.
template_subscribe_browser_button Texto interno (atributo title) que utilizan los navegadores o lectores de RSS para identificar el feed al detectarlo automáticamente.
template_twitter_button Texto visible del enlace para compartir el post en Twitter.
template_twitter_comment Texto predeterminado que aparece al compartir un post en Twitter.
date_format Formato para mostrar la fecha de publicación de los posts en las páginas.
date_locale Configuración regional (locale) para traducir los nombres de meses y días en las fechas (ej. es_MX.UTF-8).
preview_url URL para previsualizar el post mientras se edita. Por defecto utiliza el valor de global_url. Útil si escribes posts en local antes de subirlos al servidor.
markdown_bin Ruta al ejecutable del programa que convierte Markdown a HTML (ej. markdown o Markdown.pl). Déjalo vacío para que el script lo detecte automáticamente.

Uso

Mostrar un mensaje de ayuda con los comandos disponibles:

bb.sh

Comenzar a crear una publicación en Markdown (por defecto) o en HTML si no se encuentra un convertidor:

bb.sh post

Comenzar a crear una publicación en HTML:

bb.sh post -html

Al comenzar la creación de una publicación, se abrirá el editor de textos configurado en la variable de entorno $EDITOR, que será el espacio donde comenzarás a escribir.

El primer párrafo de una publicación se tomará como título (también se utilizará como nombre del archivo separado por guiones), y el último párrafo se utilizará para definir las etiquetas o categorías a las que pertenecerá (separadas por comas).

Al guardar y salir del editor de textos, se te preguntará qué acción realizar, ya sea publicar, editar o guardar como borrador: [P]ost this entry, [E]dit again, [D]raft for later? (p/E/d)

Cada vez que realices una publicación, el script generará un respaldo del blog en un archivo .backup.tar.gz y un respaldo diario llamado .yesterday.tar.gz.

Editar una publicación que se guardó como borrador (opción [D]raft):

bb.sh post drafts/archivo.md

Editar una publicación ya publicada (mantiene el mismo nombre de archivo):

bb.sh edit archivo.md

Editar una publicación ya publicada y cambiar el nombre del archivo si se modifica el título:

bb.sh edit -n archivo.md

Editar el HTML completo de una publicación ya publicada (mantiene el mismo nombre de archivo):

bb.sh edit -f archivo.md

Los archivos de las publicaciones NUNCA se deben editar directamente.

Eliminar una publicación y reconstruir el blog:

bb.sh delete archivo.md

Reconstruir todas las páginas y publicaciones del blog manteniendo su contenido:

bb.sh rebuild

La acción de reconstruir es útil cuando modificas la configuración o los estilos CSS de tu blog.

Eliminar todos los archivos asociados al blog:

bb.sh reset

Para confirmar la acción, debes escribir Yes, I am!. Y antes de eliminar todo, el script generará un respaldo del blog.

Listar todas las publicaciones:

bb.sh list

Listar todas las etiquetas en orden alfabético:

bb.sh tags

Listar todas las etiquetas ordenadas por número de publicaciones:

bb.sh tags -n

Conclusión

Si eres un fanático de la terminal, BashBlog es una herramienta simple y rápida para comenzar a crear tu blog. Aunque carece de un sistema de organización por carpetas para las publicaciones, te permite adjuntar recursos estáticos como imágenes, videos o archivos en tus publicaciones, organizándolos como los necesites.

Referencias

Etiquetas: herramientas