1 unstable release
0.1.0 | Sep 7, 2024 |
---|
#1942 in Command line utilities
19KB
339 lines
shell-scriptman
This program allows users to efficiently manage and execute custom shell scripts by organizing them into local or global scopes, creating new scripts, editing existing ones, or removing obsolete entries—all with a simple interface.
Licensed under MIT.
Description
This tool simplifies the management of custom scripts across global and project-specific scopes.
By using cmd <name>
, you can invoke a global script from any directory.
Commands for script management begin with a dash or double dash.
You can create a project scope with cmd --init
, enabling the management of scripts that are active only when the current directory is within the project directory.
All scripts are stored in a hidden .cmd
folder.
For project scopes, this folder is located in the project root where --init
was run.
For the global scope, the folder is within the cmd
command's installation directory, which you can usually find by running whereis cmd
.
Script is not invoked through a specific shell, it is run directly. To setup shell used for its invocation use shebang on its first line, for example:
#!/usr/bin/env bash
#!/usr/bin/env zsh
#!/usr/bin/env fish
We avoid setting up any extra variables by invoking the script from the current working directory. To make a script work from the project root add the following code to the beginning of the script.
cd "$(dirname "$0")/../.." || exit
Installation
Requries cargo
to compile the rust binary.
git clone https://github.com/vaclavblazej/shell-scriptman.git
bash shell-scriptman/setup.sh
Usage
Running command cmd
results in:
$ cmd
Usage: cmd [OPTIONS] <COMMAND>
Commands:
--init Setup local scope in the current directory [aliases: -i]
--add Create script and open it in the $EDITOR [aliases: -a]
--edit Open script index or [SCRIPT] in the $EDITOR [aliases: -e]
--remove Remove script from the index (does NOT remove file) [aliases: -r]
--version Prints out version information
Options:
-l, --local Force local scope
-g, --global Force global scope
The command holds custom scripts in a hidden folder. To create custom commands in the current folder, run:
cmd --init
cmd --add hello "Test script that prints 'Hello world!'"
These commands open your $EDITOR
to edit the hello script.
Save it and observe that the following structure was created:
.
└── .cmd
├── scripts
│ └── hello.sh
└── index.json
Invoke cmd
help to see your hello
script added and you may now run it which prints Hello world!
.
Note that this works from any subfolder of the folder where you initialized the local scope.
cmd hello
Edit the script or the index of all your commands with --edit
command.
cmd --edit hello
cmd --edit
Finally, you may remove a script via --remove
command.
cmd --edit hello
Scopes
The examples above show how to add commands to local scope -- an initialized directory.
One may also add commands to gobal scope by running the command without an initialized directory.
An operation may be forced to work in some scope with options --global
and --local
.
For example, if you want to edit global scope even though you are inside a directory with local scope, invoke:
cmd --global --edit
Todos
- release to
crates.io
- split help print of global, local, and management commands
Dependencies
~1.6–2.7MB
~50K SLoC