27 个稳定版本
新版本 2.3.1 | 2024 年 8 月 15 日 |
---|---|
1.10.5 | 2024 年 7 月 4 日 |
1.10.1 | 2024 年 2 月 23 日 |
1.10.0 | 2023 年 9 月 12 日 |
1.0.0 | 2020 年 6 月 11 日 |
#888 在 开发工具 中排名
892 每月下载量
330KB
8K SLoC
rash
使用 Rust 原生绑定实现的基于 Ansible 启发的声明式 shell 脚本
入门 & 文档
有关安装和使用,请参阅我们的 文档。
为什么选择 Rash
以声明式风格管理您的脚本。
如果您
- 认为长 bash 脚本难以维护
- 喜欢 Ansible 语法来设置环境
或者将其用于本地脚本!
那么请继续阅读。
这就是 Rash!
声明式与命令式
命令式:entrypoint.sh
#!/bin/bash
set -e
REQUIRED_PARAMS="
VAULT_URL
VAULT_ROLE_ID
VAULT_SECRET_ID
VAULT_SECRET_PATH
"
for required in $REQUIRED_PARAMS ; do
[[ -z "${!required}" ]] && echo "$required IS NOT DEFINED" && exit 1
done
echo "[$0] Logging into Vault..."
VAULT_TOKEN=$(curl -s $VAULT_URL/v1/auth/approle/login \
--data '{"role_id": "'$VAULT_ROLE_ID'","secret_id": "'$VAULT_SECRET_ID'"}' \
| jq -r .auth.client_token)
echo "[$0] Getting Samuel API key from Vault..."
export APP1_API_KEY=$(curl -s -H "X-Vault-Token: $VAULT_TOKEN" \
$VAULT_URL/v1/$VAULT_SECRET_PATH | jq -r .data.api_key)
exec "$@"
声明式:entrypoint.rh
#!/bin/rash
- name: Verify input parameters
assert:
that:
- env.VAULT_URL is defined
- env.VAULT_ROLE_ID is defined
- env.VAULT_SECRET_ID is defined
- env.VAULT_SECRET_PATH is defined
- name: launch docker CMD
command:
cmd: { { rash.argv } }
transfer_pid: yes
env:
APP1_API_KEY: "{{ lookup('vault', env.VAULT_SECRET_PATH ) }}"
Docopts
包含 docopt 实现
- 轻松为命令行应用程序定义接口。
- 从文档自动生成解析器。
示例
#!/usr/bin/env -S rash --
#
# Copy files from source to dest dir
#
# Usage:
# copy.rh [options] <source>... <dest>
# copy.rh
#
# Options:
# -h --help show this help message and exit
# --mode MODE dest file permissions [default: 0644]
- copy:
src: "{{ item }}"
dest: "{{ dest }}/{{ item | split('/') | last }}"
mode: "{{ options.mode }}"
loop: "{{ source | default ([]) }}"
轻量级
您只需要 Linux 内核即可运行 Rash!
您可以在运行 Linux 的任何您喜欢的物联网芯片上使用它,或者从头开始在容器中使用它!
状态
具有少量模块的稳定 API。
依赖项
~23–53MB
~868K SLoC