Pet - A Command Line Snippet Manager
Posted on April 27, 2022 by Adrian Wyssmann ‐ 3 min read
I always look to improve the way I work, often also by the help of tools. Github is always a good place to look what's new, and I eventually always find interesting tools which I did not knew before. For example pet, a command line snippet manager.
In my post Cheatsheets and KB" I talked about cool tools already, which help to organize your knowledge and to help with command line. My latest discovery is called pet, a bit similar to kb, but still different. It’s purpose is to store commands you rarely use, in an easy and searchable manner. It offers nice features, like
- store and search commands
- use of variables (
<param=default_value>) in snippets
- execute snippets from your collection
- sync to Gist or Gitlab Snippets
- tag snippets
pet - Simple command-line snippet manager. Usage: pet [command] Available Commands: configure Edit config file edit Edit snippet file exec Run the selected commands help Help about any command list Show all snippets new Create a new snippet search Search snippets sync Sync snippets version Print the version number Flags: --config string config file (default is $HOME/.config/pet/config.toml) --debug debug mode -h, --help help for pet Use "pet [command] --help" for more information about a command.
You can easily add a new command by using
pet new, which then offers you the option to specify a command and a description:
pet new Command> echo <output> Description> Example command
As you can see I parametrized the command, so when I do
pet exec, this will be render
output as an input parameter, before executing the command. So when you run
Once you select the command we just added and hit enter, you see a dialog with the command - which you can adjust - and the parameters - in our case
So this will then use the parameter for your command
Sure, there are far much better examples, for instance this command
echo | openssl s_client -connect <domain>:<port=443> 2>/dev/null |openssl x509 -dates -noout
As you can see, we have 2 parameters, one with a default value
<port=443>. That said, you see now why this is very helpful to store (rarely used) commands in such a way.
Another cool thing is, that you can synchronize your snippets to either Gist or Gitlab Snippets. The latter, was not so well documented, hence made created a PR to make it a bit more clear. Once properly configured you can run a
pet sync which synchronizes the snippets - you can also configure to automatically synchronize if you make changes.
Tagging is also a nice feature, it basically allows you to add keywords to your commands an later search commands based on the keyword. If you are adding a new command, just use
pet new -t. For existing commands, you can add them by using
pet edit. So I change my config as follows
[[snippets]] description = "Show expiration date of SSL certificates" command = "echo | openssl s_client -connect <domain>:<port=443> 2>/dev/null |openssl x509 -dates -noout" output = "" tag = ["ssl"] [[snippets]] description = "Example command" command = "echo <output>" output = "" tag = ["example"]
An then run
pet exec -t example, I see the “Example command”
The website also describe some functions you can add to your shell, to easily add commands you just used, so have a look and try it out.