Skip to content

Repository files navigation

Bash CLI

A command line framework built using nothing but Bash and compatible with anything

Bash CLI was borne of the need to provide a common entrypoint into a range of scripts and tools for a project. Rather than port the scripts to something like Go or Python, or merge them into a single bash script, we opted to build a framework which allows and executable to be presented as a sub-command.

Example

bash-cli install my-app
bash-cli command create start
my-app start

Customizing Bash CLI

Bash CLI is designed to make it as simple as possible for you to create your application. To that end, everything that makes it "Bash CLI" can be tweaked and changed by simply modifying the following files in your app directory.

  • .name should contain the name of your command line, something like "My Awesome App"
  • .author is meant to contain your name (or the name of your company)
  • .version should contain the version of your app, you can automatically include this using git describe --tags > app/.version
  • .help should be a short-ish description of what your app does and how people should use it. Don't worry about including help for every command here, or even a command list, Bash CLI will handle that for you automatically.

Adding Commands

Bash CLI commands are just a stock-standard script with a filename that matches the command name. These scripts are contained within your app folder, or within nested folders there if you want to create a tree-based command structure.

For example, the script app/test/hello would be available through cli test hello. Any arguments passed after the command will be curried through to the script, making it trivial to pass values and options around as needed.

The simplest way to add a command however, is to just run bash-cli command create [command name] and have it plop down the files for you to customize.

Contextual Help

Bash CLI provides tools which enable your users to easily discover how to use your command line without needing to read your docs (a travesty, we know). To make this possible, you'll want to add two extra files for each command.

The first, [command].usage should define the arguments list that your command expects to receive, something like NAME [MIDDLE_NAMES...] SURNAME. This file is entirely optional, leaving it out will have Bash CLI present the command as if it didn't accept arguments.

The second, [command].help is used to describe the arguments that your command accepts, as well as provide a bit of additional context around how it works, when you should use it etc.

In addition to providing help for commands, you may also provide it for directories to explain what their sub-commands are intended to achieve. To do this, simply add a .help file to the directory.

Autocomplete

Autocomplete functionality has been added to make navigating the command line even easier than it was before. To install it, simply add the following to /etc/bash_completion.d/my-app.

source"/opt/my-app/complete"complete -F _bash_cli my-app

If you want to add completion to your commands just create [command].complete file which returns array.

OPTIONS=("one""two""three")
echo${OPTIONS[@]}

See example/completion command as example.

You also might need to have access to arguments it could be done via: local_args_array=(${COMP_WORDS[@]:${cmd_arg_start}}) for: cli example completion 1 2 3 4local_args_array will be '1 2 3 4'

You also could use fzf in here to make interactive selects:

echo -e "one\ntwo\nthree"| fzf

Frequently Asked Questions

  1. Can I use Bash CLI to run things which aren't bash scripts? Absolutely, Bash CLI simply executes files - it doesn't care whether they're written in Bash, Ruby, Python or Go - if you can execute the file then you can use it with Bash CLI.

  2. Will Bash CLI work on my Mac? It should, we've built everything to keep it as portable as possible, so if you do have a problem don't hesitate to open a bug report.

  3. Does it allow me to use tab-autocomplete? As of the latest version, yes it does. The install command included in this repo will automatically set up your /etc/bash_completion.d/ directory to provide support for your project.

About

A command line framework built using nothing but Bash and compatible with anything

Topics

Resources

Stars

115 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - SierraSoftworks/bash-cli: A command line framework built using nothing but Bash and compatible with anything · GitHub
Skip to content

Repository files navigation

Bash CLI

A command line framework built using nothing but Bash and compatible with anything

Bash CLI was borne of the need to provide a common entrypoint into a range of scripts and tools for a project. Rather than port the scripts to something like Go or Python, or merge them into a single bash script, we opted to build a framework which allows and executable to be presented as a sub-command.

Example

bash-cli install my-app
bash-cli command create start
my-app start

Customizing Bash CLI

Bash CLI is designed to make it as simple as possible for you to create your application. To that end, everything that makes it "Bash CLI" can be tweaked and changed by simply modifying the following files in your app directory.

  • .name should contain the name of your command line, something like "My Awesome App"
  • .author is meant to contain your name (or the name of your company)
  • .version should contain the version of your app, you can automatically include this using git describe --tags > app/.version
  • .help should be a short-ish description of what your app does and how people should use it. Don't worry about including help for every command here, or even a command list, Bash CLI will handle that for you automatically.

Adding Commands

Bash CLI commands are just a stock-standard script with a filename that matches the command name. These scripts are contained within your app folder, or within nested folders there if you want to create a tree-based command structure.

For example, the script app/test/hello would be available through cli test hello. Any arguments passed after the command will be curried through to the script, making it trivial to pass values and options around as needed.

The simplest way to add a command however, is to just run bash-cli command create [command name] and have it plop down the files for you to customize.

Contextual Help

Bash CLI provides tools which enable your users to easily discover how to use your command line without needing to read your docs (a travesty, we know). To make this possible, you'll want to add two extra files for each command.

The first, [command].usage should define the arguments list that your command expects to receive, something like NAME [MIDDLE_NAMES...] SURNAME. This file is entirely optional, leaving it out will have Bash CLI present the command as if it didn't accept arguments.

The second, [command].help is used to describe the arguments that your command accepts, as well as provide a bit of additional context around how it works, when you should use it etc.

In addition to providing help for commands, you may also provide it for directories to explain what their sub-commands are intended to achieve. To do this, simply add a .help file to the directory.

Autocomplete

Autocomplete functionality has been added to make navigating the command line even easier than it was before. To install it, simply add the following to /etc/bash_completion.d/my-app.

source"/opt/my-app/complete"complete -F _bash_cli my-app

If you want to add completion to your commands just create [command].complete file which returns array.

OPTIONS=("one""two""three")
echo${OPTIONS[@]}

See example/completion command as example.

You also might need to have access to arguments it could be done via: local_args_array=(${COMP_WORDS[@]:${cmd_arg_start}}) for: cli example completion 1 2 3 4local_args_array will be '1 2 3 4'

You also could use fzf in here to make interactive selects:

echo -e "one\ntwo\nthree"| fzf

Frequently Asked Questions

  1. Can I use Bash CLI to run things which aren't bash scripts? Absolutely, Bash CLI simply executes files - it doesn't care whether they're written in Bash, Ruby, Python or Go - if you can execute the file then you can use it with Bash CLI.

  2. Will Bash CLI work on my Mac? It should, we've built everything to keep it as portable as possible, so if you do have a problem don't hesitate to open a bug report.

  3. Does it allow me to use tab-autocomplete? As of the latest version, yes it does. The install command included in this repo will automatically set up your /etc/bash_completion.d/ directory to provide support for your project.

About

A command line framework built using nothing but Bash and compatible with anything

Topics

Resources

Stars

115 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - SierraSoftworks/bash-cli: A command line framework built using nothing but Bash and compatible with anything · GitHub
Skip to content

Repository files navigation

Bash CLI

A command line framework built using nothing but Bash and compatible with anything

Bash CLI was borne of the need to provide a common entrypoint into a range of scripts and tools for a project. Rather than port the scripts to something like Go or Python, or merge them into a single bash script, we opted to build a framework which allows and executable to be presented as a sub-command.

Example

bash-cli install my-app
bash-cli command create start
my-app start

Customizing Bash CLI

Bash CLI is designed to make it as simple as possible for you to create your application. To that end, everything that makes it "Bash CLI" can be tweaked and changed by simply modifying the following files in your app directory.

  • .name should contain the name of your command line, something like "My Awesome App"
  • .author is meant to contain your name (or the name of your company)
  • .version should contain the version of your app, you can automatically include this using git describe --tags > app/.version
  • .help should be a short-ish description of what your app does and how people should use it. Don't worry about including help for every command here, or even a command list, Bash CLI will handle that for you automatically.

Adding Commands

Bash CLI commands are just a stock-standard script with a filename that matches the command name. These scripts are contained within your app folder, or within nested folders there if you want to create a tree-based command structure.

For example, the script app/test/hello would be available through cli test hello. Any arguments passed after the command will be curried through to the script, making it trivial to pass values and options around as needed.

The simplest way to add a command however, is to just run bash-cli command create [command name] and have it plop down the files for you to customize.

Contextual Help

Bash CLI provides tools which enable your users to easily discover how to use your command line without needing to read your docs (a travesty, we know). To make this possible, you'll want to add two extra files for each command.

The first, [command].usage should define the arguments list that your command expects to receive, something like NAME [MIDDLE_NAMES...] SURNAME. This file is entirely optional, leaving it out will have Bash CLI present the command as if it didn't accept arguments.

The second, [command].help is used to describe the arguments that your command accepts, as well as provide a bit of additional context around how it works, when you should use it etc.

In addition to providing help for commands, you may also provide it for directories to explain what their sub-commands are intended to achieve. To do this, simply add a .help file to the directory.

Autocomplete

Autocomplete functionality has been added to make navigating the command line even easier than it was before. To install it, simply add the following to /etc/bash_completion.d/my-app.

source"/opt/my-app/complete"complete -F _bash_cli my-app

If you want to add completion to your commands just create [command].complete file which returns array.

OPTIONS=("one""two""three")
echo${OPTIONS[@]}

See example/completion command as example.

You also might need to have access to arguments it could be done via: local_args_array=(${COMP_WORDS[@]:${cmd_arg_start}}) for: cli example completion 1 2 3 4local_args_array will be '1 2 3 4'

You also could use fzf in here to make interactive selects:

echo -e "one\ntwo\nthree"| fzf

Frequently Asked Questions

  1. Can I use Bash CLI to run things which aren't bash scripts? Absolutely, Bash CLI simply executes files - it doesn't care whether they're written in Bash, Ruby, Python or Go - if you can execute the file then you can use it with Bash CLI.

  2. Will Bash CLI work on my Mac? It should, we've built everything to keep it as portable as possible, so if you do have a problem don't hesitate to open a bug report.

  3. Does it allow me to use tab-autocomplete? As of the latest version, yes it does. The install command included in this repo will automatically set up your /etc/bash_completion.d/ directory to provide support for your project.

About

A command line framework built using nothing but Bash and compatible with anything

Topics

Resources

Stars

115 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - SierraSoftworks/bash-cli: A command line framework built using nothing but Bash and compatible with anything · GitHub
Skip to content

Repository files navigation

Bash CLI

A command line framework built using nothing but Bash and compatible with anything

Bash CLI was borne of the need to provide a common entrypoint into a range of scripts and tools for a project. Rather than port the scripts to something like Go or Python, or merge them into a single bash script, we opted to build a framework which allows and executable to be presented as a sub-command.

Example

bash-cli install my-app
bash-cli command create start
my-app start

Customizing Bash CLI

Bash CLI is designed to make it as simple as possible for you to create your application. To that end, everything that makes it "Bash CLI" can be tweaked and changed by simply modifying the following files in your app directory.

  • .name should contain the name of your command line, something like "My Awesome App"
  • .author is meant to contain your name (or the name of your company)
  • .version should contain the version of your app, you can automatically include this using git describe --tags > app/.version
  • .help should be a short-ish description of what your app does and how people should use it. Don't worry about including help for every command here, or even a command list, Bash CLI will handle that for you automatically.

Adding Commands

Bash CLI commands are just a stock-standard script with a filename that matches the command name. These scripts are contained within your app folder, or within nested folders there if you want to create a tree-based command structure.

For example, the script app/test/hello would be available through cli test hello. Any arguments passed after the command will be curried through to the script, making it trivial to pass values and options around as needed.

The simplest way to add a command however, is to just run bash-cli command create [command name] and have it plop down the files for you to customize.

Contextual Help

Bash CLI provides tools which enable your users to easily discover how to use your command line without needing to read your docs (a travesty, we know). To make this possible, you'll want to add two extra files for each command.

The first, [command].usage should define the arguments list that your command expects to receive, something like NAME [MIDDLE_NAMES...] SURNAME. This file is entirely optional, leaving it out will have Bash CLI present the command as if it didn't accept arguments.

The second, [command].help is used to describe the arguments that your command accepts, as well as provide a bit of additional context around how it works, when you should use it etc.

In addition to providing help for commands, you may also provide it for directories to explain what their sub-commands are intended to achieve. To do this, simply add a .help file to the directory.

Autocomplete

Autocomplete functionality has been added to make navigating the command line even easier than it was before. To install it, simply add the following to /etc/bash_completion.d/my-app.

source"/opt/my-app/complete"complete -F _bash_cli my-app

If you want to add completion to your commands just create [command].complete file which returns array.

OPTIONS=("one""two""three")
echo${OPTIONS[@]}

See example/completion command as example.

You also might need to have access to arguments it could be done via: local_args_array=(${COMP_WORDS[@]:${cmd_arg_start}}) for: cli example completion 1 2 3 4local_args_array will be '1 2 3 4'

You also could use fzf in here to make interactive selects:

echo -e "one\ntwo\nthree"| fzf

Frequently Asked Questions

  1. Can I use Bash CLI to run things which aren't bash scripts? Absolutely, Bash CLI simply executes files - it doesn't care whether they're written in Bash, Ruby, Python or Go - if you can execute the file then you can use it with Bash CLI.

  2. Will Bash CLI work on my Mac? It should, we've built everything to keep it as portable as possible, so if you do have a problem don't hesitate to open a bug report.

  3. Does it allow me to use tab-autocomplete? As of the latest version, yes it does. The install command included in this repo will automatically set up your /etc/bash_completion.d/ directory to provide support for your project.

About

A command line framework built using nothing but Bash and compatible with anything

Topics

Resources

Stars

115 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - SierraSoftworks/bash-cli: A command line framework built using nothing but Bash and compatible with anything · GitHub
Skip to content

Repository files navigation

Bash CLI

A command line framework built using nothing but Bash and compatible with anything

Bash CLI was borne of the need to provide a common entrypoint into a range of scripts and tools for a project. Rather than port the scripts to something like Go or Python, or merge them into a single bash script, we opted to build a framework which allows and executable to be presented as a sub-command.

Example

bash-cli install my-app
bash-cli command create start
my-app start

Customizing Bash CLI

Bash CLI is designed to make it as simple as possible for you to create your application. To that end, everything that makes it "Bash CLI" can be tweaked and changed by simply modifying the following files in your app directory.

  • .name should contain the name of your command line, something like "My Awesome App"
  • .author is meant to contain your name (or the name of your company)
  • .version should contain the version of your app, you can automatically include this using git describe --tags > app/.version
  • .help should be a short-ish description of what your app does and how people should use it. Don't worry about including help for every command here, or even a command list, Bash CLI will handle that for you automatically.

Adding Commands

Bash CLI commands are just a stock-standard script with a filename that matches the command name. These scripts are contained within your app folder, or within nested folders there if you want to create a tree-based command structure.

For example, the script app/test/hello would be available through cli test hello. Any arguments passed after the command will be curried through to the script, making it trivial to pass values and options around as needed.

The simplest way to add a command however, is to just run bash-cli command create [command name] and have it plop down the files for you to customize.

Contextual Help

Bash CLI provides tools which enable your users to easily discover how to use your command line without needing to read your docs (a travesty, we know). To make this possible, you'll want to add two extra files for each command.

The first, [command].usage should define the arguments list that your command expects to receive, something like NAME [MIDDLE_NAMES...] SURNAME. This file is entirely optional, leaving it out will have Bash CLI present the command as if it didn't accept arguments.

The second, [command].help is used to describe the arguments that your command accepts, as well as provide a bit of additional context around how it works, when you should use it etc.

In addition to providing help for commands, you may also provide it for directories to explain what their sub-commands are intended to achieve. To do this, simply add a .help file to the directory.

Autocomplete

Autocomplete functionality has been added to make navigating the command line even easier than it was before. To install it, simply add the following to /etc/bash_completion.d/my-app.

source"/opt/my-app/complete"complete -F _bash_cli my-app

If you want to add completion to your commands just create [command].complete file which returns array.

OPTIONS=("one""two""three")
echo${OPTIONS[@]}

See example/completion command as example.

You also might need to have access to arguments it could be done via: local_args_array=(${COMP_WORDS[@]:${cmd_arg_start}}) for: cli example completion 1 2 3 4local_args_array will be '1 2 3 4'

You also could use fzf in here to make interactive selects:

echo -e "one\ntwo\nthree"| fzf

Frequently Asked Questions

  1. Can I use Bash CLI to run things which aren't bash scripts? Absolutely, Bash CLI simply executes files - it doesn't care whether they're written in Bash, Ruby, Python or Go - if you can execute the file then you can use it with Bash CLI.

  2. Will Bash CLI work on my Mac? It should, we've built everything to keep it as portable as possible, so if you do have a problem don't hesitate to open a bug report.

  3. Does it allow me to use tab-autocomplete? As of the latest version, yes it does. The install command included in this repo will automatically set up your /etc/bash_completion.d/ directory to provide support for your project.

About

A command line framework built using nothing but Bash and compatible with anything

Topics

Resources

Stars

115 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - SierraSoftworks/bash-cli: A command line framework built using nothing but Bash and compatible with anything · GitHub
Skip to content

Repository files navigation

Bash CLI

A command line framework built using nothing but Bash and compatible with anything

Bash CLI was borne of the need to provide a common entrypoint into a range of scripts and tools for a project. Rather than port the scripts to something like Go or Python, or merge them into a single bash script, we opted to build a framework which allows and executable to be presented as a sub-command.

Example

bash-cli install my-app
bash-cli command create start
my-app start

Customizing Bash CLI

Bash CLI is designed to make it as simple as possible for you to create your application. To that end, everything that makes it "Bash CLI" can be tweaked and changed by simply modifying the following files in your app directory.

  • .name should contain the name of your command line, something like "My Awesome App"
  • .author is meant to contain your name (or the name of your company)
  • .version should contain the version of your app, you can automatically include this using git describe --tags > app/.version
  • .help should be a short-ish description of what your app does and how people should use it. Don't worry about including help for every command here, or even a command list, Bash CLI will handle that for you automatically.

Adding Commands

Bash CLI commands are just a stock-standard script with a filename that matches the command name. These scripts are contained within your app folder, or within nested folders there if you want to create a tree-based command structure.

For example, the script app/test/hello would be available through cli test hello. Any arguments passed after the command will be curried through to the script, making it trivial to pass values and options around as needed.

The simplest way to add a command however, is to just run bash-cli command create [command name] and have it plop down the files for you to customize.

Contextual Help

Bash CLI provides tools which enable your users to easily discover how to use your command line without needing to read your docs (a travesty, we know). To make this possible, you'll want to add two extra files for each command.

The first, [command].usage should define the arguments list that your command expects to receive, something like NAME [MIDDLE_NAMES...] SURNAME. This file is entirely optional, leaving it out will have Bash CLI present the command as if it didn't accept arguments.

The second, [command].help is used to describe the arguments that your command accepts, as well as provide a bit of additional context around how it works, when you should use it etc.

In addition to providing help for commands, you may also provide it for directories to explain what their sub-commands are intended to achieve. To do this, simply add a .help file to the directory.

Autocomplete

Autocomplete functionality has been added to make navigating the command line even easier than it was before. To install it, simply add the following to /etc/bash_completion.d/my-app.

source"/opt/my-app/complete"complete -F _bash_cli my-app

If you want to add completion to your commands just create [command].complete file which returns array.

OPTIONS=("one""two""three")
echo${OPTIONS[@]}

See example/completion command as example.

You also might need to have access to arguments it could be done via: local_args_array=(${COMP_WORDS[@]:${cmd_arg_start}}) for: cli example completion 1 2 3 4local_args_array will be '1 2 3 4'

You also could use fzf in here to make interactive selects:

echo -e "one\ntwo\nthree"| fzf

Frequently Asked Questions

  1. Can I use Bash CLI to run things which aren't bash scripts? Absolutely, Bash CLI simply executes files - it doesn't care whether they're written in Bash, Ruby, Python or Go - if you can execute the file then you can use it with Bash CLI.

  2. Will Bash CLI work on my Mac? It should, we've built everything to keep it as portable as possible, so if you do have a problem don't hesitate to open a bug report.

  3. Does it allow me to use tab-autocomplete? As of the latest version, yes it does. The install command included in this repo will automatically set up your /etc/bash_completion.d/ directory to provide support for your project.

About

A command line framework built using nothing but Bash and compatible with anything

Topics

Resources

Stars

115 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - SierraSoftworks/bash-cli: A command line framework built using nothing but Bash and compatible with anything · GitHub
Skip to content

Repository files navigation

Bash CLI

A command line framework built using nothing but Bash and compatible with anything

Bash CLI was borne of the need to provide a common entrypoint into a range of scripts and tools for a project. Rather than port the scripts to something like Go or Python, or merge them into a single bash script, we opted to build a framework which allows and executable to be presented as a sub-command.

Example

bash-cli install my-app
bash-cli command create start
my-app start

Customizing Bash CLI

Bash CLI is designed to make it as simple as possible for you to create your application. To that end, everything that makes it "Bash CLI" can be tweaked and changed by simply modifying the following files in your app directory.

  • .name should contain the name of your command line, something like "My Awesome App"
  • .author is meant to contain your name (or the name of your company)
  • .version should contain the version of your app, you can automatically include this using git describe --tags > app/.version
  • .help should be a short-ish description of what your app does and how people should use it. Don't worry about including help for every command here, or even a command list, Bash CLI will handle that for you automatically.

Adding Commands

Bash CLI commands are just a stock-standard script with a filename that matches the command name. These scripts are contained within your app folder, or within nested folders there if you want to create a tree-based command structure.

For example, the script app/test/hello would be available through cli test hello. Any arguments passed after the command will be curried through to the script, making it trivial to pass values and options around as needed.

The simplest way to add a command however, is to just run bash-cli command create [command name] and have it plop down the files for you to customize.

Contextual Help

Bash CLI provides tools which enable your users to easily discover how to use your command line without needing to read your docs (a travesty, we know). To make this possible, you'll want to add two extra files for each command.

The first, [command].usage should define the arguments list that your command expects to receive, something like NAME [MIDDLE_NAMES...] SURNAME. This file is entirely optional, leaving it out will have Bash CLI present the command as if it didn't accept arguments.

The second, [command].help is used to describe the arguments that your command accepts, as well as provide a bit of additional context around how it works, when you should use it etc.

In addition to providing help for commands, you may also provide it for directories to explain what their sub-commands are intended to achieve. To do this, simply add a .help file to the directory.

Autocomplete

Autocomplete functionality has been added to make navigating the command line even easier than it was before. To install it, simply add the following to /etc/bash_completion.d/my-app.

source"/opt/my-app/complete"complete -F _bash_cli my-app

If you want to add completion to your commands just create [command].complete file which returns array.

OPTIONS=("one""two""three")
echo${OPTIONS[@]}

See example/completion command as example.

You also might need to have access to arguments it could be done via: local_args_array=(${COMP_WORDS[@]:${cmd_arg_start}}) for: cli example completion 1 2 3 4local_args_array will be '1 2 3 4'

You also could use fzf in here to make interactive selects:

echo -e "one\ntwo\nthree"| fzf

Frequently Asked Questions

  1. Can I use Bash CLI to run things which aren't bash scripts? Absolutely, Bash CLI simply executes files - it doesn't care whether they're written in Bash, Ruby, Python or Go - if you can execute the file then you can use it with Bash CLI.

  2. Will Bash CLI work on my Mac? It should, we've built everything to keep it as portable as possible, so if you do have a problem don't hesitate to open a bug report.

  3. Does it allow me to use tab-autocomplete? As of the latest version, yes it does. The install command included in this repo will automatically set up your /etc/bash_completion.d/ directory to provide support for your project.

About

A command line framework built using nothing but Bash and compatible with anything

Topics

Resources

Stars

115 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - SierraSoftworks/bash-cli: A command line framework built using nothing but Bash and compatible with anything · GitHub
Skip to content

Repository files navigation

Bash CLI

A command line framework built using nothing but Bash and compatible with anything

Bash CLI was borne of the need to provide a common entrypoint into a range of scripts and tools for a project. Rather than port the scripts to something like Go or Python, or merge them into a single bash script, we opted to build a framework which allows and executable to be presented as a sub-command.

Example

bash-cli install my-app
bash-cli command create start
my-app start

Customizing Bash CLI

Bash CLI is designed to make it as simple as possible for you to create your application. To that end, everything that makes it "Bash CLI" can be tweaked and changed by simply modifying the following files in your app directory.

  • .name should contain the name of your command line, something like "My Awesome App"
  • .author is meant to contain your name (or the name of your company)
  • .version should contain the version of your app, you can automatically include this using git describe --tags > app/.version
  • .help should be a short-ish description of what your app does and how people should use it. Don't worry about including help for every command here, or even a command list, Bash CLI will handle that for you automatically.

Adding Commands

Bash CLI commands are just a stock-standard script with a filename that matches the command name. These scripts are contained within your app folder, or within nested folders there if you want to create a tree-based command structure.

For example, the script app/test/hello would be available through cli test hello. Any arguments passed after the command will be curried through to the script, making it trivial to pass values and options around as needed.

The simplest way to add a command however, is to just run bash-cli command create [command name] and have it plop down the files for you to customize.

Contextual Help

Bash CLI provides tools which enable your users to easily discover how to use your command line without needing to read your docs (a travesty, we know). To make this possible, you'll want to add two extra files for each command.

The first, [command].usage should define the arguments list that your command expects to receive, something like NAME [MIDDLE_NAMES...] SURNAME. This file is entirely optional, leaving it out will have Bash CLI present the command as if it didn't accept arguments.

The second, [command].help is used to describe the arguments that your command accepts, as well as provide a bit of additional context around how it works, when you should use it etc.

In addition to providing help for commands, you may also provide it for directories to explain what their sub-commands are intended to achieve. To do this, simply add a .help file to the directory.

Autocomplete

Autocomplete functionality has been added to make navigating the command line even easier than it was before. To install it, simply add the following to /etc/bash_completion.d/my-app.

source"/opt/my-app/complete"complete -F _bash_cli my-app

If you want to add completion to your commands just create [command].complete file which returns array.

OPTIONS=("one""two""three")
echo${OPTIONS[@]}

See example/completion command as example.

You also might need to have access to arguments it could be done via: local_args_array=(${COMP_WORDS[@]:${cmd_arg_start}}) for: cli example completion 1 2 3 4local_args_array will be '1 2 3 4'

You also could use fzf in here to make interactive selects:

echo -e "one\ntwo\nthree"| fzf

Frequently Asked Questions

  1. Can I use Bash CLI to run things which aren't bash scripts? Absolutely, Bash CLI simply executes files - it doesn't care whether they're written in Bash, Ruby, Python or Go - if you can execute the file then you can use it with Bash CLI.

  2. Will Bash CLI work on my Mac? It should, we've built everything to keep it as portable as possible, so if you do have a problem don't hesitate to open a bug report.

  3. Does it allow me to use tab-autocomplete? As of the latest version, yes it does. The install command included in this repo will automatically set up your /etc/bash_completion.d/ directory to provide support for your project.

About

A command line framework built using nothing but Bash and compatible with anything

Topics

Resources

Stars

115 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages