golang构建强大命令行别名的CLI工具插件nostromo的使用

Golang构建强大命令行别名的CLI工具插件nostromo的使用

nostromo是一个CLI工具,可以快速构建声明式别名,实时创建多维工具。

简介

管理别名可能会很繁琐且难以设置。nostromo使这个过程变得简单可靠。该工具会在你的.bashrc/.zshrc中添加快捷方式,调用nostromo二进制文件。它读取并管理其清单中的所有别名,用于查找和执行实际命令,并交换任何替换以简化调用。

mess-hall

功能特点

  • 简化别名管理
  • 作用域命令和替换
  • 构建复杂命令树
  • 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种执行模式:

  1. concatenate - 默认,将命令与子命令按定义连接
  2. independent - 使用;分隔执行命令和子命令
  3. 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

1 回复

更多关于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是一个强大的工具,可以帮助你:

  1. 简化复杂命令为简单别名
  2. 组织相关命令到命名空间
  3. 创建带参数的动态命令
  4. 组合多个命令为一个操作
  5. 轻松管理和分享你的别名配置

通过合理使用Nostromo,你可以显著提高命令行工作效率,减少重复输入长命令的时间。

回到顶部