Skip to main content

Exploring CLI: Better Bash Scripts with Bashly Part 2

 

I enjoyed the srcset project so much that I want to create a set of scripts for creating and managing my projects. In recent Linux news it's been said that the home directory will have a Projects folder by default. I have always created this folder anyway and the scripts I will be creating assume this path exists or will create it if it doesn't. This post will spotlight the new-website command.

To recap what I said in the first part of this series, I aim for my scripts to follow some basic guidelines when possible and ideal:

  • a command does one thing and does it well
  • a command should be able to accept data from pipe
The new-website script, like the previous srcset project, is simple. I bounce back and forth between different project directory structures for websites and I am aiming to try and stick to one convention and have some uniformity (writing this I am thinking of changing it already in the script). Everyone seems to have their own preferred way of laying things out. I try to keep things as simple as possible structurally. 

The new-website script can create a simple, single page website that would be classified as a landing page, or a "full" site with the common additional pages (about, contact, gallery). I added the additional option for creating a vanilla html-css-js or a bootstrap project with the bootstrap CDN links in the html files. Personally I add the bootstrap files to the project when it's finished because it slightly improves page loading since the webpage doesn't have to call out for resources. 

I have initially chosen to place any additional files, images and scripts in an assets subdirectory sorted by type. The index.html and 404.html are placed in the root of the site and all other pages are placed in assets/html. This project was a bit more complex than the srcset script and the final script runs a little over 500 lines (close to 300 lines written by myself and the rest added by Bashly). 

As with the srcset project I started with the following commands:
    $ mkdir new-website 
    $ cd new-website 
    $ bashly init

Also, just as I did in the last project, I tried working with the seperate files in a lib directory but with as many lines as it was getting up to it was just easier for me to keep things straight by putting everything in a single file. A majority of the lines are the boilerplate. Instead of having the starter code in template files and just copying them over, I decided to use functions that cat HEREDOCs of the code:

This way I can just redirect the output of these functions to whatever files I needed. This keeps the project light and simple and with far less files to manage because the idea is to end up with a single executable bash script I can move into my path. The bashly.yaml file was fairly shorter with this project because I set all of the globals and checking in the root_command.sh script.

Once the meat of the script is written in the root_command.sh file I run 'bashly generate' to get my finished project. I tested it every ideal way I could think of and I'm fairly sure I handled any bad usage in the script.

As I stated before the script can accept input from stdin and can be piped:

It can also create multiple projects with one command by passing a comma separated list as the argument:

I'll note that to provide this ability I made use of the following code:

The Internal Field Separator is set to ',' to split the argument string into array elements using the comma as the separator. All the code for this project is viewable on Github.

Comments

Popular posts from this blog

2012 iMac Upgrade

I’ve always been fascinated by the longevity of Apple products. They build incredible machines, and unfortunately, Apple’s support lifecycle often leaves them abandoned – a growing mountain of e-waste. Recently, I was scrolling through the marketplace, and I spotted a treasure: a 2012 21.5” iMac for a ridiculously low $100. It was a gamble, a leap of faith, and frankly, I had no idea what I was getting into. I dove headfirst, did some quick research, and the result was...well, let’s just say it was an adventure. I’ll share the full story of my $100 Mac rescue – including the initial challenges, the surprising discoveries, and what I learned along the way. iMac 13,1 Specifications When introduced on October 23, 2012, this particular iMac came in three options: 2.7 GHz Core i5 (I5-3330S) Order: MD093LL/A  Model: A1418 (EMC 2544) RAM: 8 GB VRAM: 512 MB Storage: 1 TB HDD 2.9 GHz Core i5 (I5-3470S) Order: MD094LL/A Model: A1418 (EMC 2544) RAM: 8 GB VRAM: 512 MB Storage: 1 TB HDD 3.1 GHz...

Apple Magic Keyboard 2 Battery Replacement

Facebook Marketplace is a great way to get some good stuff super cheap. Sellers are often not very honest or not knowledgable about the items they have which can make it a little tricky to navigate. Sometimes, they are both of those things and even if someone is attempting to rip you off you can still come out on top with a little technical knowledge. Recently I found a listing for this Apple Magic Keyboard (lighting port) combo listed for $35. Well, as you can see in the image below this combo still sells on Amazon for $120+ used. The items on marketplace even came with the original packaging. I was skeptical, but even if only one of the pair worked I was coming out on top so I offered $25 and got it. The whole exchange was weird. I picked up the items and went straight home and put both on a charger for a while to see what I had. The mouse worked perfectly. The keyboard however, did not. One thing about the newer Apple Keyboards I can't stand is the absence of an indicator light ...

2022 M2 Macbook Air Screen Replacement

  At about six months of age, my son, Alex, was lying on the floor next to my wife, who was using her laptop. She had placed her phone down to speak with me, and in an instant, Alex reached over and pushed the lid closed, inadvertently cracking the screen where the phone rested. I experienced an immediate sense of dread. While I am adept at performing minor repairs myself, I lacked experience with M-series Macs and decided to seek professional assistance from Best Buy. Upon speaking with the Geek Squad via phone, they provided a quote of $120 for the repair and advised me to bring the device to their store. Upon arriving at Best Buy, I was required to pay a deposit before the device could be sent out for repair. However, I was informed that the actual repair cost would be significantly higher than the initial quote. Reluctantly, I agreed to send the device out, and upon receiving an official quote, I discovered that the total cost was approximately $800. At that time, we were able ...