31 个稳定版本

新版本 2.3.1 2024年8月15日
1.10.5 2024年7月4日
1.10.1 2024年2月23日
1.10.0 2023年9月12日
0.1.0 2020年5月17日

#692过程宏 中排名

Download history 1/week @ 2024-05-15 7/week @ 2024-05-22 6/week @ 2024-05-29 6/week @ 2024-06-05 6/week @ 2024-06-12 251/week @ 2024-06-19 29/week @ 2024-06-26 316/week @ 2024-07-03 22/week @ 2024-07-10 388/week @ 2024-08-07

每月 下载量 388
2 个库中使用(通过 rash_core

自定义许可协议

15KB
84

rash

Build status Rash Docker image Documentation crates.io concept-map Rash license Rash Aur package

受Ansible启发的Rust原生绑定声明式shell脚本

入门 & 文档

有关安装和使用说明,请参阅我们的 文档

为什么选择Rash

以声明式风格管理您的脚本。

如果您

  • 觉得长的bash脚本难以维护
  • 喜欢Ansible语法来设置您的环境

或者用它来编写本地脚本!

那么请继续阅读。

这就是Rash!

声明式 vs 命令式

命令式: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的任何喜欢的IoT芯片上使用它,或者在从头开始构建的容器中使用它!

状态

具有少量模块的稳定API。

依赖项

~0.3–0.9MB
~20K SLoC