ricardogj08/blog

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="main.css" type="text/css" />
<link rel="stylesheet" href="blog.css" type="text/css" />
<link rel="alternate" type="application/rss+xml" title="Suscribirse a esta página..." href="feed.rss" />
<title>BashBlog: Un script en Bash para crear blogs</title>
</head><body>
<div id="divbodyholder">
<div class="headerholder"><div class="header">
<div id="title">
<h1 class="nomargin"><a class="ablack" href="https://ricardogj08.gitman.io/blog/index.html">🐇 La Madriguera del Conejito</a></h1>
<div id="description">Servidores y Linux desde la madriguera 🐧</div>
</div></div></div>
<div id="divbody"><div class="content">
<!-- entry begin -->
<h3><a class="ablack" href="bashblog-un-script-en-bash-para-crear-blogs.html">
BashBlog: Un script en Bash para crear blogs
</a></h3>
<!-- bashblog_timestamp: #202606141229.52# -->
<div class="subtitle">junio 14, 2026 &mdash; 
Ricardo García Jiménez
</div>
<!-- text begin -->
<p>En 2020 leí un artículo de <a href="https://victorhckinthefreeworld.com/2020/03/20/crea-blog-web-script-bash/">Victorhck</a> 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. </p>
<hr />
<h2>Instalación</h2>
<p>Clona el repositorio:</p>
<pre><code class="language-bash">git clone https://github.com/cfenollosa/bashblog.git
cd bashblog
</code></pre>
<p>Otorga permisos de ejecución y cópialo para tenerlo disponible en todo el sistema:</p>
<pre><code class="language-bash">chmod 755 bb.sh
sudo cp bb.sh /usr/local/bin
</code></pre>
<blockquote><p>Si tienes en mente escribir todas tus publicaciones en Markdown, debes instalar un programa que convierta Markdown a HTML (por ejemplo: <code>Markdown.pl</code>, <code>markdown</code>, <code>smu</code>).</p>
</blockquote>
<h2>Configuración</h2>
<p>Puedes modificar directamente las variables de configuración dentro de la función <code>global_variables()</code> en el script, o crear un archivo <code>.config</code> en el directorio donde vivirán todas las publicaciones de tu blog.</p>
<p>Aquí se listan y explican las variables que puedes configurar:</p>
<table>
<tr><th>Variable </th><th>Descripción </th></tr>
<tr><td><code>global_title</code> </td><td>Título del blog. </td></tr>
<tr><td><code>global_description</code> </td><td>Descripción o subtítulo del blog. </td></tr>
<tr><td><code>global_url</code> </td><td>URL pública del blog (sin barra al final). </td></tr>
<tr><td><code>global_author</code> </td><td>Nombre del autor principal del blog. </td></tr>
<tr><td><code>global_author_url</code> </td><td>URL del perfil, repositorio o sitio web del autor. </td></tr>
<tr><td><code>global_email</code> </td><td>Correo electrónico del autor. </td></tr>
<tr><td><code>global_license</code> </td><td>Licencia del contenido del blog. </td></tr>
<tr><td><code>global_analytics</code> </td><td>ID de Google Analytics (ej. <code>UA-XXXXX</code>). </td></tr>
<tr><td><code>global_analytics_file</code> </td><td>Archivo con código personalizado para otros sistemas de analíticas o para el código Universal de Google Analytics. </td></tr>
<tr><td><code>global_feedburner</code> </td><td>URL de Feedburner para redirigir el feed RSS. Déjalo vacío para usar el feed local. </td></tr>
<tr><td><code>global_twitter_username</code> </td><td>Nombre de usuario de Twitter (sin la <code>@</code>) para el enlace de compartir y las menciones. </td></tr>
<tr><td><code>global_twitter_card_image</code> </td><td>URL absoluta de la imagen por defecto para las vistas previas (Twitter Cards) de los enlaces del blog. </td></tr>
<tr><td><code>global_twitter_cookieless</code> </td><td>Si es <code>true</code>, muestra un enlace simple para compartir (sin cookies ni scripts). Si es <code>false</code>, carga el widget oficial de Twitter con el contador de tweets. </td></tr>
<tr><td><code>global_disqus_username</code> </td><td>Nombre de usuario de tu cuenta de Disqus para habilitar los comentarios. </td></tr>
<tr><td><code>index_file</code> </td><td>Nombre del archivo de la página principal. </td></tr>
<tr><td><code>number_of_index_articles</code> </td><td>Número de posts que se mostrarán en la página principal. </td></tr>
<tr><td><code>archive_index</code> </td><td>Nombre del archivo que lista todos los posts. </td></tr>
<tr><td><code>tags_index</code> </td><td>Nombre del archivo que lista todas las etiquetas (tags). </td></tr>
<tr><td><code>non_blogpost_files</code> </td><td>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. (<code>about.html</code> <code>contact.html</code>)). </td></tr>
<tr><td><code>blog_feed</code> </td><td>Nombre del archivo del feed RSS. </td></tr>
<tr><td><code>number_of_feed_articles</code> </td><td>Número de posts que se incluirán en el feed RSS. </td></tr>
<tr><td><code>cut_do</code> </td><td>Si es <code>cut</code>, 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 (<code>&quot;&quot;</code>), se muestra el post completo. </td></tr>
<tr><td><code>cut_tags</code> </td><td>Si es <code>yes</code> y la opción anterior es <code>cut</code>, oculta las etiquetas del post en la página principal. Si es <code>no</code>, las etiquetas seguirán visibles aunque el texto esté cortado. </td></tr>
<tr><td><code>cut_line</code> </td><td>Expresión regular que indica la línea HTML donde se debe cortar el post. </td></tr>
<tr><td><code>save_markdown</code> </td><td>Si es <code>yes</code>, guarda el archivo Markdown (<code>.md</code>) original junto al archivo HTML (<code>.html</code>) generado. Si se deja vacío (<code>&quot;&quot;</code>), se descarta el <code>.md</code> y solo se conserva el <code>.html</code>. </td></tr>
<tr><td><code>prefix_tags</code> </td><td>Prefijo de los archivos HTML generados para cada etiqueta (tag). </td></tr>
<tr><td><code>header_file</code> </td><td>Ruta a un archivo HTML con una cabecera <code>&lt;head&gt;</code> personalizada. Déjalo vacío para que BashBlog la genere automáticamente. </td></tr>
<tr><td><code>footer_file</code> </td><td>Ruta a un archivo HTML con un pie de página (footer) personalizado. Déjalo vacío para que BashBlog lo genere automáticamente. </td></tr>
<tr><td><code>body_begin_file</code> </td><td>Archivo HTML cuyo contenido se incrustará justo después de abrir la etiqueta <code>&lt;body&gt;</code>. </td></tr>
<tr><td><code>body_end_file</code> </td><td>Archivo HTML cuyo contenido se incrustará justo antes de cerrar la etiqueta <code>&lt;/body&gt;</code>. </td></tr>
<tr><td><code>body_begin_file_index</code> </td><td>Similar a <code>body_begin_file</code>, pero su contenido solo se incrusta en la página principal (<code>index.html</code>). </td></tr>
<tr><td><code>css_include</code> </td><td>Array de archivos CSS que se enlazarán en todas las páginas (ej. (<code>main.css</code> <code>blog.css</code>)). Si se deja vacío, BashBlog generará uno por defecto. </td></tr>
<tr><td><code>html_exclude</code> </td><td>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. </td></tr>
<tr><td><code>template_comments</code> </td><td>Texto que aparece junto al enlace de Twitter (ej. <code>¿Comentarios?</code>). </td></tr>
<tr><td><code>template_read_more</code> </td><td>Texto del enlace <code>Leer más...</code> que aparece cuando un post se corta en la página principal o en las páginas de etiquetas. </td></tr>
<tr><td><code>template_archive</code> </td><td>Texto del enlace para ir a la página de todos los posts al final de la página principal. </td></tr>
<tr><td><code>template_archive_title</code> </td><td>Título de la página que lista todos los posts. </td></tr>
<tr><td><code>template_tags_title</code> </td><td>Título de la página que lista todas las etiquetas. </td></tr>
<tr><td><code>template_tags_posts</code> </td><td>Palabra en plural para referirse a los posts (ej. <code>artículos</code> o <code>posts</code>). </td></tr>
<tr><td><code>template_tags_posts_2_4</code> </td><td>Palabra en plural especial para lenguas eslavas (usada cuando hay entre 2 y 4 posts). </td></tr>
<tr><td><code>template_tags_posts_singular</code> </td><td>Palabra en singular para referirse a los posts (ej. <code>artículo</code> o <code>post</code>). </td></tr>
<tr><td><code>template_tag_title</code> </td><td>Texto para el <code>&lt;title&gt;</code> de las páginas de una etiqueta específica (ej. <code>Artículos etiquetados con</code>). </td></tr>
<tr><td><code>template_tags_line_header</code> </td><td>Texto que precede a la lista de etiquetas en un post (ej. <code>Etiquetas:</code>). </td></tr>
<tr><td><code>template_archive_index_page</code> </td><td>Texto del enlace para volver a la página principal desde las páginas de todos los posts y etiquetas. </td></tr>
<tr><td><code>template_subscribe</code> </td><td>Texto del enlace visible para suscribirse al feed RSS al final de la página principal. </td></tr>
<tr><td><code>template_subscribe_browser_button</code> </td><td>Texto interno (atributo <code>title</code>) que utilizan los navegadores o lectores de RSS para identificar el feed al detectarlo automáticamente. </td></tr>
<tr><td><code>template_twitter_button</code> </td><td>Texto visible del enlace para compartir el post en Twitter. </td></tr>
<tr><td><code>template_twitter_comment</code> </td><td>Texto predeterminado que aparece al compartir un post en Twitter. </td></tr>
<tr><td><code>date_format</code> </td><td>Formato para mostrar la fecha de publicación de los posts en las páginas. </td></tr>
<tr><td><code>date_locale</code> </td><td>Configuración regional (locale) para traducir los nombres de meses y días en las fechas (ej. <code>es_MX.UTF-8</code>). </td></tr>
<tr><td><code>preview_url</code> </td><td>URL para previsualizar el post mientras se edita. Por defecto utiliza el valor de <code>global_url</code>. Útil si escribes posts en local antes de subirlos al servidor. </td></tr>
<tr><td><code>markdown_bin</code> </td><td>Ruta al ejecutable del programa que convierte Markdown a HTML (ej. <code>markdown</code> o <code>Markdown.pl</code>). Déjalo vacío para que el script lo detecte automáticamente. </td></tr>
</table>
<h2>Uso</h2>
<p>Mostrar un mensaje de ayuda con los comandos disponibles:</p>
<pre><code class="language-bash">bb.sh
</code></pre>
<p>Comenzar a crear una publicación en Markdown (por defecto) o en HTML si no se encuentra un convertidor:</p>
<pre><code class="language-bash">bb.sh post
</code></pre>
<p>Comenzar a crear una publicación en HTML:</p>
<pre><code class="language-bash">bb.sh post -html
</code></pre>
<blockquote><p>Al comenzar la creación de una publicación, se abrirá el editor de textos configurado en la variable de entorno <code>$EDITOR</code>, que será el espacio donde comenzarás a escribir.</p>
<p>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).</p>
<p>Al guardar y salir del editor de textos, se te preguntará qué acción realizar, ya sea publicar, editar o guardar como borrador:
<code>[P]ost this entry, [E]dit again, [D]raft for later? (p/E/d)</code></p>
<p>Cada vez que realices una publicación, el script generará un respaldo del blog en un archivo <code>.backup.tar.gz</code> y un respaldo diario llamado <code>.yesterday.tar.gz</code>.</p>
</blockquote>
<p>Editar una publicación que se guardó como borrador (opción <code>[D]raft</code>):</p>
<pre><code class="language-bash">bb.sh post drafts/archivo.md
</code></pre>
<p>Editar una publicación ya publicada (mantiene el mismo nombre de archivo):</p>
<pre><code class="language-bash">bb.sh edit archivo.md
</code></pre>
<p>Editar una publicación ya publicada y cambiar el nombre del archivo si se modifica el título:</p>
<pre><code class="language-bash">bb.sh edit -n archivo.md
</code></pre>
<p>Editar el HTML completo de una publicación ya publicada (mantiene el mismo nombre de archivo):</p>
<pre><code class="language-bash">bb.sh edit -f archivo.md
</code></pre>
<blockquote><p>Los archivos de las publicaciones NUNCA se deben editar directamente.</p>
</blockquote>
<p>Eliminar una publicación y reconstruir el blog:</p>
<pre><code class="language-bash">bb.sh delete archivo.md
</code></pre>
<p>Reconstruir todas las páginas y publicaciones del blog manteniendo su contenido:</p>
<pre><code class="language-bash">bb.sh rebuild
</code></pre>
<blockquote><p>La acción de reconstruir es útil cuando modificas la configuración o los estilos CSS de tu blog.</p>
</blockquote>
<p>Eliminar todos los archivos asociados al blog:</p>
<pre><code class="language-bash">bb.sh reset
</code></pre>
<blockquote><p>Para confirmar la acción, debes escribir <code>Yes, I am!</code>. Y antes de eliminar todo, el script generará un respaldo del blog.</p>
</blockquote>
<p>Listar todas las publicaciones:</p>
<pre><code class="language-bash">bb.sh list
</code></pre>
<p>Listar todas las etiquetas en orden alfabético:</p>
<pre><code class="language-bash">bb.sh tags
</code></pre>
<p>Listar todas las etiquetas ordenadas por número de publicaciones:</p>
<pre><code class="language-bash">bb.sh tags -n
</code></pre>
<h2>Conclusión</h2>
<p>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.</p>
<h2>Referencias</h2>
<ul>
<li><a href="https://victorhckinthefreeworld.com/2020/03/20/crea-blog-web-script-bash/">https://victorhckinthefreeworld.com/2020/03/20/crea-blog-web-script-bash/</a></li>
<li><a href="https://github.com/cfenollosa/bashblog">https://github.com/cfenollosa/bashblog</a></li>
</ul>
<p>Etiquetas: <a href='etiqueta_herramientas.html'>herramientas</a></p>
<!-- text end -->
<!-- entry end -->
</div>
<div id="footer">CC by-sa 4.0 <a href="https://gitman.io/ricardogj08">Ricardo García Jiménez</a> &mdash; <a href="mailto:ricardogj08&#64;tutamail&#46;com">ricardogj08&#64;tutamail&#46;com</a><br/>
Generated with <a href="https://github.com/cfenollosa/bashblog">bashblog</a>, a single bash script to easily create blogs like this one</div>
</div></div>
</body></html>