#文档 #shell #绑定 #Ansible #声明式 #二进制 #rash

bin+lib mdbook_rash

rash 代码创建文档的二进制程序

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开发工具 中排名

Download history 1/week @ 2024-05-18 86/week @ 2024-06-15 184/week @ 2024-06-22 192/week @ 2024-06-29 23/week @ 2024-07-06 1/week @ 2024-07-13 161/week @ 2024-07-27 120/week @ 2024-08-03 611/week @ 2024-08-10

892 每月下载量

自定义许可协议

330KB
8K SLoC

rash

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

使用 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