21 个版本

0.9.0 2023 年 6 月 15 日
0.8.0 2022 年 10 月 13 日
0.7.2 2022 年 10 月 13 日
0.7.0 2022 年 5 月 27 日
0.0.1 2020 年 12 月 23 日

命令行工具 中排名 2517

Download history 6/week @ 2024-04-02 87/week @ 2024-07-02

每月下载 87

许可协议:Apache-2.0GPL-3.0-only

105KB
3K SLoC

Sauce

license Version info Build Status

中心真理是中心真理,我所关心的没有相对的

一个帮助管理特定上下文/项目的 shell 事物的工具,如环境变量。

目录

示例工作流程

# Suppose you've got some directory structure
❯ mkdir -p projects/foo
❯ cd projects

# In "projects", you want some shorthand for quickly pushing your branches
❯ sauce new
Created /Users/danc/.local/share/sauce/projects.toml

❯ sauce set alias push='git push origin "$(git rev-parse --abbrev-ref HEAD)"'
Setting push = git push origin "$(git rev-parse --abbrev-ref HEAD)"

# Your project is, naturally, using 12-factor methodology, so you've got some
# project specific environment variables you need to load!
❯ cd foo
❯ sauce set env foo=bar AWS_PROFILE=meow
Setting foo = bar
Setting AWS_PROFILE = meow

# The core purpose!
❯ sauce
Sourced ~/.local/share/sauce/projects/foo.toml

❯ env
...
AWS_PROFILE=meow
foo=bar

# Note the cascaded loading of upstream values!
❯ push

设置

安装

使用 Cargo

  • cargo安装 sauce

下载版本

  • 版本 下载 Linux/Mac 二进制文件

Shell 钩子

目前明确支持以下 shell: zshbashfish。存在脚手架以支持其他 shell,这应该可以支持其他可能需要 "$SHELL" 特定行为的常见 shell。

将事物加载到环境中需要执行最少的 shell 代码,因此安装二进制文件(以下建议)后,您需要将钩子添加到您的 bashrc/zshrc/config.fish 等文件中。

  • bash eval "$(sauce --shell bash shell init)"
  • zsh eval "$(sauce --shell zsh shell init)"
  • fish sauce --shell fish shell init | source

根据与上述 shell 的相似程度,您可能可以使用上述 shell init 钩子之一,直到添加明确支持

目标

“sauce”可以加载/卸载的东西称为“目标”。

目前支持的目标包括

  • 环境变量

    sauce set env FOO=bar
    
  • 别名

    sauce set alias g=git
    
  • 函数

    sauce set function add 'echo $(expr $1 + $2)'
    

特性

sauce 命令

此用例的主要是使用 sauce 命令,没有子命令,没有参数。这会将当前目录中适用的所有 sauce 目标(环境变量、别名和函数)加载到当前 shell 中。

还有许多选项,允许您自定义 sauce 的行为,例如 sauce --glob DATABASE*sauce --filter env:AWS_PROFILEsauce --path ~

中央存储

中央存储的原始动机是因为获得了一台新电脑,需要翻查 ~50 个仓库以找到所有散落的 .env 文件和 git 忽略的注释等,以确保没有留下任何东西。

然而,一般来说,将 sauce 数据与实际文件夹放在同一位置会引入许多技术、安全和可用性问题,这些问题可以通过中央存储来规避。

级联加载

sauce 的一个关键特性是值以相对于主目录的级联方式加载。

这使得在各种位置之间组合目标(环境变量、别名和 shell 函数)变得更容易,很可能通过利用您可能已经拥有的自然目录结构。

给定一个目录结构

~/
  work/
    project/
      repo/
      repo2/
        src/
    otherproject/

您可以在任何文件夹级别/深度运行 sauce,例如 ~/work/project/repo/。保存到文件夹的值:~~/work~/work/project~/work/project/repo 都将被加载。

更具体/深的文件夹的值将优先于更通用/浅的文件夹的值。

所有 sauce 文件都位于 $XDG_DATA_HOME/sauce 文件夹中,之后文件夹结构将跟踪值的文件夹结构相匹配。以上述示例为例,如果每个文件夹都有一个 sauce 文件,您可能会看到

~/.local/share/
  sauce.toml
  sauce/
    project.toml
    project/
      repo.toml
      repo2.toml
      repo2/
        src.toml
    otherproject.toml

自动加载

请参阅 配置参考 中的 autoload-hookautoload

本地开发

对于本地开发,启用 --feature dev 可能很有用。这会改变行为,使 shell 插件指向调试构建的绝对位置。

以下可能有助于的示例别名

[alias]
build = 'cargo build --features dev && eval "$(./target/debug/sauce shell init)"'

此时,您只需运行一次 build 命令,就可以通过 cd 来测试 sauce,同时始终指向当前 shell 的项目版本的 sauce

依赖项

~8–21MB
~253K SLoC