golang构建强大命令行别名的CLI工具插件nostromo的使用
Golang构建强大命令行别名的CLI工具插件nostromo的使用
nostromo是一个CLI工具,可以快速构建声明式别名,实时创建多维工具。
简介
管理别名可能会很繁琐且难以设置。nostromo使这个过程变得简单可靠。该工具会在你的.bashrc
/.zshrc
中添加快捷方式,调用nostromo二进制文件。它读取并管理其清单中的所有别名,用于查找和执行实际命令,并交换任何替换以简化调用。
功能特点
- 简化别名管理
- 作用域命令和替换
- 构建复杂命令树
- Shell补全支持
- 执行代码片段
- 分布式清单
- 强大的树管理
- 酷炫主题
安装
使用brew安装:
brew install pokanop/pokanop/nostromo
使用go get安装:
go get -u github.com/pokanop/nostromo
初始化
初始化nostromo并创建清单:
nostromo init
这会创建一个位于~/.nostromo
的清单。要自定义目录,可以设置NOSTROMO_HOME
环境变量。
基本使用
添加命令
nostromo add cmd foo "echo bar"
添加带描述的命令
nostromo add cmd foo "echo bar" -d "My magical foo command that prints bar"
交互式添加
nostromo add
使用keypath
nostromo add cmd foo.bar.baz 'echo hello'
这会创建命令树,可以执行:
foo
foo bar
foo bar baz
添加替换
nostromo add sub foo.bar //some/long/string sls
执行模式
nostromo支持3种执行模式:
concatenate
- 默认,将命令与子命令按定义连接independent
- 使用;
分隔执行命令和子命令exclusive
- 仅执行此命令,忽略父命令
设置模式:
nostromo add cmd foo.bar.baz -m exclusive "echo baz"
或全局设置:
nostromo set mode independent
示例
将复杂别名转换为简洁命令
原始别名:
alias ios-build='pushd $IOS_REPO_PATH;xcodebuild -workspace Foo.xcworkspace -scheme foo_scheme'
alias ios-test='pushd $IOS_REPO_PATH;xcodebuild -workspace Foo.xcworkspace -scheme foo_test_scheme'
alias android-build='pushd $ANDROID_REPO_PATH;./gradlew build'
alias android-test='pushd $ANDROID_REPO_PATH;./gradlew test'
转换为:
build ios
build android
test ios
test android
高级功能
分布式清单
nostromo dock <source>
nostromo sync <name>...
nostromo undock <name>
命令树管理
nostromo move cmd <source> <destination>
nostromo rename cmd <source> <name>
nostromo copy cmd <source> <destination>
nostromo detach <name> <key.path>...
主题设置
nostromo set theme <name>
可用主题:
default
grayscale
emoji
完整示例
# 初始化
nostromo init
# 添加构建命令
nostromo add cmd build.ios "pushd $IOS_REPO_PATH; xcodebuild -workspace Foo.xcworkspace -scheme foo_scheme"
nostromo add cmd build.android "pushd $ANDROID_REPO_PATH; ./gradlew build"
# 添加测试命令
nostromo add cmd test.ios "pushd $IOS_REPO_PATH; xcodebuild -workspace Foo.xcworkspace -scheme foo_test_scheme"
nostromo add cmd test.android "pushd $ANDROID_REPO_PATH; ./gradlew test"
# 添加替换
nostromo add sub build.ios $IOS_REPO_PATH iosrepo
nostromo add sub build.android $ANDROID_REPO_PATH androidrepo
# 现在可以使用简洁命令
build ios
build android
test ios
test android
nostromo让命令行别名管理变得简单高效,可以构建复杂的命令树和工作流,大大提高工作效率。
更多关于golang构建强大命令行别名的CLI工具插件nostromo的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于golang构建强大命令行别名的CLI工具插件nostromo的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
使用Nostromo构建强大的Golang命令行别名工具
Nostromo是一个用Go编写的CLI工具,用于创建和管理强大的命令行别名和快捷方式。它允许你将复杂的命令序列转换为简单的别名,提高工作效率。
安装Nostromo
go get -u github.com/pokanop/nostromo
基本使用
1. 创建别名
package main
import (
"fmt"
"os"
"os/exec"
"github.com/pokanop/nostromo"
)
func main() {
// 初始化nostromo
n, err := nostromo.New()
if err != nil {
fmt.Println("Error:", err)
os.Exit(1)
}
// 添加一个简单别名
err = n.AddAlias("lsd", "ls -la", "List directory contents with details")
if err != nil {
fmt.Println("Error:", err)
os.Exit(1)
}
// 保存配置
err = n.Save()
if err != nil {
fmt.Println("Error:", err)
os.Exit(1)
}
fmt.Println("Alias 'lsd' created successfully!")
}
2. 使用别名
创建别名后,你可以在终端直接使用:
lsd # 这将执行 ls -la
高级功能
1. 命令组合
// 添加组合命令
err = n.AddAlias("deploy", "git push origin master && docker build -t myapp . && docker push myapp", "Full deployment workflow")
if err != nil {
fmt.Println("Error:", err)
os.Exit(1)
}
2. 带参数的别名
// 添加带参数的别名
err = n.AddAlias("mkcd", "mkdir $1 && cd $1", "Create directory and enter it")
if err != nil {
fmt.Println("Error:", err)
os.Exit(1)
}
使用方式:
mkcd new-project
3. 嵌套别名
// 创建命名空间和嵌套别名
err = n.AddAlias("dev.db.start", "docker-compose -f db/docker-compose.yml up -d", "Start development database")
if err != nil {
fmt.Println("Error:", err)
os.Exit(1)
}
err = n.AddAlias("dev.db.stop", "docker-compose -f db/docker-compose.yml down", "Stop development database")
if err != nil {
fmt.Println("Error:", err)
os.Exit(1)
}
使用方式:
dev db start
dev db stop
实际应用示例
下面是一个完整的Go程序,演示如何使用Nostromo API管理别名:
package main
import (
"fmt"
"os"
"github.com/pokanop/nostromo"
"github.com/pokanop/nostromo/model"
)
func main() {
// 初始化nostromo
n, err := nostromo.New()
if err != nil {
fmt.Println("Error initializing nostromo:", err)
os.Exit(1)
}
// 创建一组开发相关的别名
devCommands := []struct {
name string
command string
description string
}{
{"dev.up", "docker-compose up -d", "Start all development services"},
{"dev.down", "docker-compose down", "Stop all development services"},
{"dev.logs", "docker-compose logs -f", "Show development logs"},
{"dev.psql", "docker exec -it postgres psql -U user dbname", "Connect to Postgres"},
}
for _, cmd := range devCommands {
err := n.AddAlias(cmd.name, cmd.command, cmd.description)
if err != nil {
fmt.Printf("Error adding alias %s: %v\n", cmd.name, err)
continue
}
}
// 添加一个复杂的构建部署流程
buildDeploy := model.NewCommand(
"deploy",
"Build and deploy the application",
"git pull && go build ./... && docker build -t myapp . && kubectl apply -f k8s/",
)
err = n.AddCommand(buildDeploy)
if err != nil {
fmt.Println("Error adding deploy command:", err)
}
// 保存所有更改
err = n.Save()
if err != nil {
fmt.Println("Error saving configuration:", err)
os.Exit(1)
}
fmt.Println("Aliases configured successfully!")
}
管理别名
Nostromo提供了命令行界面来管理别名:
# 列出所有别名
nostromo list
# 查看特定别名
nostromo show dev.up
# 删除别名
nostromo remove dev.up
# 编辑别名
nostromo edit dev.up
集成到Shell
为了在每次打开终端时都能使用nostromo别名,可以将以下内容添加到你的shell配置文件(如.bashrc或.zshrc):
eval "$(nostromo init)"
总结
Nostromo是一个强大的工具,可以帮助你:
- 简化复杂命令为简单别名
- 组织相关命令到命名空间
- 创建带参数的动态命令
- 组合多个命令为一个操作
- 轻松管理和分享你的别名配置
通过合理使用Nostromo,你可以显著提高命令行工作效率,减少重复输入长命令的时间。