18 个版本
0.3.6 | 2021 年 1 月 25 日 |
---|---|
0.3.5 | 2020 年 11 月 2 日 |
0.3.4 | 2020 年 8 月 15 日 |
0.3.0 | 2020 年 7 月 29 日 |
0.1.9 | 2020 年 7 月 20 日 |
#241 在 构建实用工具
52 每月下载量
220KB
5.5K SLoC
sht / short / 🩳
一个简洁的 CLI 启动器/项目管理者,使用 env 文件。
其主要目标是可读性和通过使用项目中的命令节省时间。Short 是一个命令行工具,允许通过从 .env 文件映射环境变量来运行程序(通常是 sh 脚本)。它类似于运行 eval $(.env_file) ./script.sh
并具有更多选项。
- 它负责同步并检查所有 环境文件 之间的格式。
- 提示信息:您始终知道您的当前 设置 和 环境。
- 允许在同一个 项目 中使用多个 设置。
- 允许在您的源代码中以 公共环境目录 存储示例环境文件。
- 允许在您的源代码中以 私有环境目录 🔒 存储prod/stage等环境文件。
- 您可以对环境变量进行映射,以便在 环境变量 上实时进行 选择、分组 并添加 自定义格式/情况。
- 映射的结果将被 注入 为 环境变量,在执行输出 .sh 脚本时使用。
安装
此产品处于 alpha 版,但个人使用时相对稳定。
ArchLinux AUR:short-git
git clone https://aur.archlinux.org/short-git.git
cd short-git
makepkg -si
Homebrew(OSX、Linux)
brew install vincent-herlemont/tap/short
从源代码
cargo install short
配置提示
强烈建议配置提示。这可以让你每次都知道选择了哪个 设置 和
环境。您可以查看 show
命令以获取更多详细信息。
✨ PS1 (BASH/ZSH)
使用 .bashrc
配置 PS1 的示例
export PS1="$(sht show -f):\w\$ "
使用 .zshrc
配置 PS1 的示例
⚠️ TODO ...
✨ starship
使用 自定义提示前命令: starship 的示例。
这里是在显示提示前 starship 运行的自定义脚本。
#!/bin/bash
function blastoff(){
sht show -f
}
starship_precmd_user_func=blastoff
预览
$> [my_setup:my_env] ~/your_project$
快速开始空白 ✍️
生成一个简单的 sh 脚本来显示变量。您可以使用这个基础来做什么,详见 generate
。
sht generate <setup_name> <environment_name> <file_kind:sh|bash>
$> sht init
$> sht generate setup_1 test sh -d
$> sht run
-d
:创建一个子目录(可选)。
使用模板快速开始 🚀
🌱 使用 Node && ExpressJs 的示例
根据此模板 node-express 生成一个简单的 aws sam 项目。详见 generate
。
$> sht init
$> sht generate node-express -d -t
$> sht run
-t
:从模板生成。 -d
:创建子目录 (可选)。
🌱 使用 AWS SAM 的示例
根据此模板 aws-node-sam 生成一个简单的 aws sam 项目。详见 generate
。
$> sht init
$> sht generate aws-node-sam -d -t
$> sht run
-t
:从模板生成。 -d
:创建子目录 (可选)。
--
l:列出所有模板,并添加一个新模板 here。
- 命令
init
project - 创建一个空项目generate
setup - 在项目内生成一个设置run
setup - 🚀 运行设置rename
setup - 重命名设置new
env - 创建新的环境文件sync
env - 同步环境文件edit
env - 编辑环境文件dir
env directory - 设置/取消设置公开环境目录pdir
env private directory - 设置/取消设置私有环境目录--
u:选择/切换设置/环境show
显示当前设置/环境ls
列出所有设置和环境vars
显示/比较映射环境变量envs
显示/比较环境变量
- 配置文件
short.yaml
- 概念
命令
init
项目。
创建一个空的 short.yaml
配置文件。这个文件定义了您的项目目录。此文件夹及其子文件夹中所有的 short
命令都以此配置文件为参考。
$> sht init
short.yaml(生成)
setups: {}
generate
设置。
生成一个 空的 设置或从 项目模板 仓库,此命令也可以列出所有可用的项目模板。
✍ 生成一个空的设置 ️
参数 | 必需 | 描述 |
---|---|---|
<setup_name> | yes | 设置名称 |
<env_name> | yes | 环境名称 |
<kind> | yes | 文件类型 [sh,bash ...] |
选项 | 允许为空* | 默认 | 描述 |
---|---|---|---|
-d , --directory | yes | <setup_name> | 目标目录。 |
-p , --private | no | false | 🔒 保存到私有目录。 [与"-d"冲突] |
-f , --file | no | run.sh | 脚本路径,如果缺失则创建目录。 [与"-d"冲突] |
-e , --env-directory | no | . | 公共环境目录。 [与"-d"冲突] |
示例:创建一个名为 my_setup
的设置,具有 .test
环境文件和 bash
脚本。
$> sht generate my_setup test bash
short.yaml(生成):配置文件。
setups:
my_setup:
file: run.sh
array_vars:
all:
pattern: ".*"
case: CamelCase
format: "[{key}]='{value}'"
delimiter: " "
vars: []
.test(生成):环境文件。
VAR1=VALUE1
VAR2=VALUE2
run.sh(生成):可执行文件。
#!/bin/bash
declare -A all && eval all=($ALL)
declare -p all
第二行 declare -A all && eval all=($ALL)
允许使用 bash 关联数组。
🌱 列出所有 项目模板
$> sht generate -l
🌱 从项目模板生成设置
参数 | 必需 | 描述 |
---|---|---|
<setup_name/template> | yes | 设置名称或 <template> 名称,使用 "-t" 选项留空 |
选项 | 允许为空* | 默认 | 描述 |
---|---|---|---|
-t , --template | yes | <setup_name> | 模板名称,可以在模板列表 -l 中找到 |
-d , --directory | yes | <setup_name> | 目标目录。 |
示例:创建一个包含其相关环境的 node-express
设置。
$> sht generate node-express -t
👉 short.yaml(生成) 和 run.sh(生成) 来自以下项目模板: node-express。
run
设置
运行 可执行脚本。
📜 详细信息
参数 | 必需 | 描述 |
---|---|---|
<args>... | no | 所有参数都将作为参数传递给可执行脚本。 |
$> sht run
rename
设置
重命名设置。例如 my_setup
-> another_setup
。
$> sht rename my_setup another_setup
new
环境
创建新环境。例如 dev
$> sht new dev
或私有环境。例如 prod
$> sht new dev -p
🔒 -p
将文件保存在私有目录中。
sync
环境
同步所有环境,并询问您对每个差异进行什么操作。
$> sht sync
edit
环境
使用您的默认文本编辑器编辑环境文件。您可以使用 --editor <editor>
或 EDITOR
环境变量选择不同的编辑器。
$> sht edit
dir
环境目录
设置或取消环境目录。
$> sht dir ./envs/
$> sht dir --unset
pdir
环境私有目录
设置或取消环境目录。
$> sht pdir ../private_envs/
$> sht pdir --unset
--
u:选择/切换设置/环境
📜 详细信息
参数 | 必需 | 描述 |
---|---|---|
<setup/environment> | yes | 设置名称或环境名称,如果已经指定了另一个。 |
<environment> | no | 环境名称。 |
在这个例子中,我们有两个名为
my_setup_1
和my_setup_2
的设置,以及两个名为dev
和prod
的环境文件。我们必须选择设置和环境dev
,并将环境切换到prod
。
例如,选择带有 dev
环境的 my_setup_1
。
$> sht use my_setup_1 dev
例如,从 dev
切换到 prod
环境。
$> sht use prod
👉 如果已经选择了设置和环境,您可以避免提供设置,只需指示您想要的环境。
现在我们切换到第二个设置
my_setup_2
。为此,我们必须指定设置 和 环境。
例如,在保持 prod
环境的情况下,从 my_setup_1
切换到 my_setup_2
。
$> sht use my_setup_2 prod
show
显示当前设置/环境
📜 详细信息
选项 | 默认 | 描述 |
---|---|---|
-f, --format | [{设置}:{环境}] |
显示格式 |
$> sht show
💁 your current setup is `my_setup`:`dev`
👉 此命令可用于在 shell 的提示部分显示当前设置/环境。因此,您可以使用选项 -f
(格式)。此选项删除换行符,您可以将格式格式化为您想要的格式。默认值为 [{setup}:{env}]
。
{setup}
将被替换为当前设置名称。{env}
将被替换为当前环境名称。
完整示例
在这个例子中,我们有一个名为
my_setup
的设置和两个名为dev
和prod
的环境文件。我们必须选择设置和环境dev
,并将环境切换到prod
。
$> sht use my_setup dev
$> sht show
💁 your current setup is `my_setup`:`dev`
$> sht use prod
$> sht show
💁 your current setup is `my_setup`:`prod`
ls
列出所有设置和环境
列出所有设置/环境并指示当前一个,如 sht show
。
$> sht ls
my_project (run.sh)
prod (.prod)
dev (.dev)
my_sub_project_1 (my_sub_project_1/run.sh)
prod (sub_env/.prod)
staging (sub_env/.staging)
test (sub_env/.test)
my_sub_project_2 (my_sub_project_2/run.sh)
> prod (sub_env/.prod)
staging (sub_env/.staging)
test (sub_env/.test)
vars
显示/比较映射环境变量
如你所见,通过变量的 说明。有两个显示环境变量(大写)和变量(小写)。
<variable> | <ENVIRONMENT_VARIABLE> | <value>
.. | .. | ..
当变量是数组时,将显示如下。
<variable> | <ENVIRONMENT_VARIABLE> (<pattern>) `case`
| <IN_ARRAY_ENVIRONMENT_VARIABLE> | <value>
| .. | ..
例如,显示 test
当前环境的变量映射。
$> sht vars
| test
all | ALL (.*)
| VAR1 | VALUE1
| VAR2 | VALUE2
var1 | VAR1 | VALUE1
var2 | VAR2 | VALUE2
short_setup | SHORT_SETUP | my_sub_project_2
short_env | SHORT_ENV | test
例如,比较 test
和 prod
环境的变量映射。
$> sht vars -e prod test
| prod | test
all | ALL (.*)
| VAR1 | VALUE1 | VALUE1
| VAR2 | VALUE2_OF_PROD | VALUE2
var1 | VAR1 | VALUE1 | VALUE1
var2 | VAR2 | VALUE2_OF_PROD | VALUE2
short_setup | SHORT_SETUP | my_sub_project_2 | my_sub_project_2
short_env | SHORT_ENV | prod | test
envs
显示/比较环境变量
例如,显示 test
当前环境的变量。
$> sht vars
| test
VAR1 | VALUE1
VAR2 | VALUE2
例如,比较 test
和 prod
环境的变量。
$> sht vars -e prod test
| prod | test
VAR1 | VALUE1 | VALUE1
VAR2 | VALUE2_OF_PROD | VALUE2
配置文件 short.yaml
setups:
<setup_name>: # Setup.name : String
file: run.sh # Setup.file : Path - Required
public_env_dir: env/ # Setup.public_env_dir : Path - Optional
array_vars: # Map<ArrayVar.name,ArrayVar|Regex> : Optional
<group1>: ".*" # String, It's a short way to set only ArrayVar.pattern.
<group2>: # ArrayVar
pattern: PREFIX_.* # ArrayVar.pattern : Regex - Required
case: CamelCase # ArrayVar.case : Enum<Case> - Optional
format: "[{key}]='{value}'" # ArrayVar.format : String - Optional
delimiter: " " # ArrayVar.delimiter : String - Optional
vars: [] # Vars
<...>
表示您可以放入任何属性名称。
Setup.name
设置名称
Setup.file
指向可运行脚本的路径。
Setup.public_env_dir
指向项目子目录的路径。
ArrayVars
此配置允许在单个环境变量中分组并应用自定义格式和映射。
- 例如,通过 设置配置
VAR1=VALUE1
VAR2=VALUE2
PREFIX_VAR1=P_VALUE1
PREFIX_VAR2=P_VALUE2
环境变量将被注入,有关详细信息,请参阅 ArrayVar.format。
GROUP1 => VAR1:VALUE1,VAR2:VALUE2,PREFIX_VAR1:P_VALUE1,PREFIX_VAR2:P_VALUE2
GROUP2 => [PrefixVar1]='P_VALUE1' [PrefixVar2]='P_VALUE2'
ArrayVar.pattern(正则表达式)
所有与该模式匹配的变量将被分组。
更多信息请参阅 lib(regex)* 中使用的说明。
ArrayVar.case
为每个变量应用一个情况。
可用的情况 |
---|
驼峰命名法 |
snake_case |
SHOUTY_SNAKE_CASE |
mixedCase |
标题化 |
更多信息请参阅 lib(heck)* 中使用的说明。
ArrayVar.format
应用于每个变量的格式,并将这些格式连接成一个字符串。可以使用两种数据:{key}
和 {value}
。
👉 默认情况下(sh),应用格式 {key}:{value}
。
👉 默认情况下(bash),它应用bash关联数组格式 [{key}]='{value}'
(文档)。
ArrayVar.delimiter
注入到数组中每个变量之间的字符串。
👉 默认情况下,它是单个空格 "
"。
Vars[var]
在这里设置的变量将被选择用于注入。
👉 必须与环境变量 匹配。
👉 如果没有指定,则选择 所有变量。
👉 如果它是空的,如 vars: []
,则选择任何变量。
帮助
USAGE:
sht [SUBCOMMAND]
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
SUBCOMMANDS:
init Init project, create an empty "short.yaml" configuration file.
generate Generate empty setup or from project template repository.
run Run setup [ARGS...].
rename Rename setup.
new Create env file ".<env>", in public directory by default.
sync Sync env files.
edit Edit env file.
dir Public env directory, [.] by default.
pdir Private env directory, unset by default.
use Switch of current setup or/and environment.
show Show your current setup.
ls Display setups and environments available.
vars Display/Diff mapping environment variables.
envs Display/Diff environment variables.
help Prints this message or the help of the given subcommand(s)
概念
项目 short.yaml
它是一个包含配置文件 short.yaml
的目录,该文件定义了 项目根目录。
此目录及其子目录中的所有 short
命令都将参考此配置文件。
- 要创建/初始化项目,请参阅
init
命令。
设置
设置是short的主要概念。设置配置在 short.yaml
中描述,您可以添加多个。它需要 名称、一个 可执行文件、公共环境目录 和 映射选项。这就是short如何轻松地简化运行命令。
👉 每个设置只能有一个 可执行文件。
目录(公共/私有)
这些目录存储 .<env>
文件。存在于这些目录中的环境文件将相互同步。如果它们设置为相同的 配置。
公共目录
此目录必须在您的项目内部(默认值是项目的根目录 根文件夹)。这可以是子目录,例如 ./env/
,有关更多详细信息,请参阅 配置设置。因此,如果您已配置git或另一个代码版本控制系统,公共目录允许将非关键配置文件(例如示例配置文件)与代码一起保存。
.
└── project
├── envs # public env directory
│ └── .dev
├── ...
└── short.yaml
- 有关 设置/取消设置 公共目录,请参阅
dir
命令。
私人目录 🔒
此目录必须在您的项目外部。私人目录的路径将不会存储在 项目配置 ✅ 中!因此,如果您已配置git或另一个代码版本控制系统,则该目录将永远不会与您的代码一起提交,并且私人目录的任何线索都将出现在简短配置 short.yaml
中。
.
├── envs # private env directory
│ └── .dev
└── project
├── run.sh
└── short.yaml
- 有关 设置/取消设置 私人目录,请参阅
pdir
命令。
环境文件 .<environment_name>
每个环境文件定义一个环境,以便环境名称来自文件名,如 .<my_env>
环境文件 => my_env
环境名称。
👉 前缀 .
是必须的。
文件格式必须遵循 RFC 2 – .env文件 指南。
# Comment
VAR1=VALUE1
VAR2=VALUE2
同一设置(公共环境目录/私人环境目录)内的每个环境都相互 同步。因此,值可以更改,但 变量、变量顺序、空格、注释 将保持相同。
变量
变量可以来自 环境文件 或在 配置文件 中指定:array_vars 和 vars。
👉 作为 环境变量 注入到脚本中,变量名称将转换为 UPPER_CASE。(另请参阅 vars
命令)。
👉 作为变量表示,它们始终转换为 lower_case。(另请参阅 vars
命令)。此显示仅用于命令行输出的可读性,如 vars
命令。
选项允许为空
类似于 -d
的选项,可以在 sht generate my_template my_env -d
中找到,可以有三种状态。
- 禁用 未指定选项:例如,
sht generate my_template my_env
- 激活;默认值:例如
sht generate my_template my_env -d
-d
的值是my_template
。 - 带值激活:例如
sht generate my_template my_env -d foo
。-d
的值是foo
。
依赖项
~23–39MB
~652K SLoC