commit 27864ca435ffccf5a396158b3a22d101824c354e
| author | 斟酌 鵬兄 <tgckpg@gmail.com> |
| date | 2026-06-26T11:19:07Z |
| subject | Do not use \u |
commit 27864ca435ffccf5a396158b3a22d101824c354e
Author: 斟酌 鵬兄 <tgckpg@gmail.com>
Date: 2026-06-26T11:19:07Z
Do not use \u
---
bash/core/50_upgrade.bash | 49 ++++++---------------
bash/core/80_public_api.bash | 28 ++++++++++++
bash/rbashrc | 102 +++++++++++++++++++++----------------------
bash/rbashrc.in | 21 +++------
4 files changed, 95 insertions(+), 105 deletions(-)
diff --git a/bash/core/50_upgrade.bash b/bash/core/50_upgrade.bash
index c7aed09..bd8b30a 100755
--- a/bash/core/50_upgrade.bash
+++ b/bash/core/50_upgrade.bash
@@ -1,55 +1,34 @@
rbash-upgrade() {
- local target url tmp rendered backup
- local host domain color content
+ local target url tmp backup
target="$__RBASH_SCRIPT"
url="$(rbash_url "rbashrc")"
- host="${1:-$RHOSTNAME}"
- domain="${2:-$RDOMAIN}"
- color="${3:-$RCOLOR}"
-
echo "Updating $target"
tmp="$(mktemp "${TMPDIR:-/tmp}/rbashrc.download.XXXXXX")" || return 1
- rendered="$(mktemp "${TMPDIR:-/tmp}/rbashrc.rendered.XXXXXX")" || {
- rm -f "$tmp"
- return 1
- }
if ! rbash_download "$url" > "$tmp"; then
echo "rbash: upgrade download failed: $url" >&2
- rm -f "$tmp" "$rendered"
+ rm -f "$tmp"
return 1
fi
if [ ! -s "$tmp" ]; then
echo "rbash: downloaded rbashrc is empty; refusing to install" >&2
- rm -f "$tmp" "$rendered"
+ rm -f "$tmp"
return 1
fi
- content="$(cat "$tmp")"
-
- content="${content//<HOSTNAME>/$host}"
- content="${content//<DOMAIN>/$domain}"
- content="${content//<RCOLOR>/$color}"
-
- printf '%s\n' "$content" > "$rendered" || {
- echo "rbash: failed to render new rbashrc" >&2
- rm -f "$tmp" "$rendered"
- return 1
- }
-
- if ! grep -q 'RBASH_HOME' "$rendered"; then
- echo "rbash: rendered file does not look like rbashrc; refusing to install" >&2
- rm -f "$tmp" "$rendered"
+ if ! grep -q 'RBASH_HOME' "$tmp"; then
+ echo "rbash: downloaded file does not look like rbashrc; refusing to install" >&2
+ rm -f "$tmp"
return 1
fi
- if ! bash -n "$rendered"; then
- echo "rbash: rendered rbashrc has syntax errors; refusing to install" >&2
- rm -f "$tmp" "$rendered"
+ if ! bash -n "$tmp"; then
+ echo "rbash: downloaded rbashrc has syntax errors; refusing to install" >&2
+ rm -f "$tmp"
return 1
fi
@@ -58,23 +37,21 @@ rbash-upgrade() {
if [ -f "$target" ]; then
cp "$target" "$backup" || {
echo "rbash: failed to create backup: $backup" >&2
- rm -f "$tmp" "$rendered"
+ rm -f "$tmp"
return 1
}
echo "Backup: $backup"
fi
- chmod 700 "$rendered"
+ chmod 700 "$tmp"
- if ! mv "$rendered" "$target"; then
+ if ! mv "$tmp" "$target"; then
echo "rbash: failed to replace $target" >&2
echo "rbash: backup remains at $backup" >&2
- rm -f "$tmp" "$rendered"
+ rm -f "$tmp"
return 1
fi
- rm -f "$tmp"
-
rm -rf "$RBASH_CACHE_DIR"
mkdir -p "$RBASH_CACHE_DIR"
diff --git a/bash/core/80_public_api.bash b/bash/core/80_public_api.bash
new file mode 100755
index 0000000..ec71db6
--- /dev/null
+++ b/bash/core/80_public_api.bash
@@ -0,0 +1,28 @@
+rbash-host() {
+ local host="${1:-}"
+ local domain="${2:-}"
+ local color="${3:-}"
+
+ if [ -z "$host" ] || [ -z "$domain" ]; then
+ echo "Usage: rbash-host HOST DOMAIN [COLOR]" >&2
+ echo "Example: rbash-host penguin @macstudio 6" >&2
+ return 1
+ fi
+
+ mkdir -p "$RBASH_HOME"
+
+ {
+ printf 'RHOSTNAME=%q\n' "$host"
+ printf 'RDOMAIN=%q\n' "$domain"
+ if [ -n "$color" ]; then
+ printf 'RCOLOR=%q\n' "$color"
+ fi
+ } > "$RBASH_ENV"
+
+ echo "Wrote $RBASH_ENV"
+
+ # shellcheck source=/dev/null
+ source "$RBASH_ENV"
+
+ __rbash_setup_prompt
+}
\ No newline at end of file
diff --git a/bash/rbashrc b/bash/rbashrc
index a0caa2d..0ac8266 100755
--- a/bash/rbashrc
+++ b/bash/rbashrc
@@ -1,31 +1,19 @@
-#!/usr/bin/env bash
-
-# Generated from bash/rbashrc.in + bash/core/*.
-# Do not edit bash/rbashrc directly.
-
-case $- in
- *i*) ;;
- *) return ;;
-esac
-
-__RBASH_SCRIPT="${BASH_SOURCE[0]}"
-
RBASH_HOME="${RBASH_HOME:-$HOME/.rbash}"
+
RBASH_REMOTE="${RBASH_REMOTE:-https://sgit.k8s.astropenguin.net}"
RBASH_REPO="${RBASH_REPO:-penguin/utils}"
RBASH_REF="${RBASH_REF:-master}"
RBASH_PATH="${RBASH_PATH:-bash}"
-RBASH_CACHE_DIR="$RBASH_HOME/sources"
+RBASH_CACHE_DIR="$RBASH_HOME/cache"
RBASH_CONFIG="$RBASH_HOME/config"
RBASH_ENV="$RBASH_HOME/env"
RBASH_MERGED="$RBASH_CACHE_DIR/merged"
RBASH_BIN="$RBASH_HOME/bin"
-RHOSTNAME="<HOSTNAME>"
-RDOMAIN="<DOMAIN>"
-RCOLOR="<RCOLOR>"
-
+RHOSTNAME="${RHOSTNAME:-\\u}"
+RDOMAIN="${RDOMAIN:-@$(hostname -s)}"
+RCOLOR="${RCOLOR:-6}"
# ---- rbash: bash/core/00_env.bash ----
@@ -377,57 +365,36 @@ r2dissource() {
# ---- rbash: bash/core/50_upgrade.bash ----
rbash-upgrade() {
- local target url tmp rendered backup
- local host domain color content
+ local target url tmp backup
target="$__RBASH_SCRIPT"
url="$(rbash_url "rbashrc")"
- host="${1:-$RHOSTNAME}"
- domain="${2:-$RDOMAIN}"
- color="${3:-$RCOLOR}"
-
echo "Updating $target"
tmp="$(mktemp "${TMPDIR:-/tmp}/rbashrc.download.XXXXXX")" || return 1
- rendered="$(mktemp "${TMPDIR:-/tmp}/rbashrc.rendered.XXXXXX")" || {
- rm -f "$tmp"
- return 1
- }
if ! rbash_download "$url" > "$tmp"; then
echo "rbash: upgrade download failed: $url" >&2
- rm -f "$tmp" "$rendered"
+ rm -f "$tmp"
return 1
fi
if [ ! -s "$tmp" ]; then
echo "rbash: downloaded rbashrc is empty; refusing to install" >&2
- rm -f "$tmp" "$rendered"
+ rm -f "$tmp"
return 1
fi
- content="$(cat "$tmp")"
-
- content="${content//<HOSTNAME>/$host}"
- content="${content//<DOMAIN>/$domain}"
- content="${content//<RCOLOR>/$color}"
-
- printf '%s\n' "$content" > "$rendered" || {
- echo "rbash: failed to render new rbashrc" >&2
- rm -f "$tmp" "$rendered"
- return 1
- }
-
- if ! grep -q 'RBASH_HOME' "$rendered"; then
- echo "rbash: rendered file does not look like rbashrc; refusing to install" >&2
- rm -f "$tmp" "$rendered"
+ if ! grep -q 'RBASH_HOME' "$tmp"; then
+ echo "rbash: downloaded file does not look like rbashrc; refusing to install" >&2
+ rm -f "$tmp"
return 1
fi
- if ! bash -n "$rendered"; then
- echo "rbash: rendered rbashrc has syntax errors; refusing to install" >&2
- rm -f "$tmp" "$rendered"
+ if ! bash -n "$tmp"; then
+ echo "rbash: downloaded rbashrc has syntax errors; refusing to install" >&2
+ rm -f "$tmp"
return 1
fi
@@ -436,23 +403,21 @@ rbash-upgrade() {
if [ -f "$target" ]; then
cp "$target" "$backup" || {
echo "rbash: failed to create backup: $backup" >&2
- rm -f "$tmp" "$rendered"
+ rm -f "$tmp"
return 1
}
echo "Backup: $backup"
fi
- chmod 700 "$rendered"
+ chmod 700 "$tmp"
- if ! mv "$rendered" "$target"; then
+ if ! mv "$tmp" "$target"; then
echo "rbash: failed to replace $target" >&2
echo "rbash: backup remains at $backup" >&2
- rm -f "$tmp" "$rendered"
+ rm -f "$tmp"
return 1
fi
- rm -f "$tmp"
-
rm -rf "$RBASH_CACHE_DIR"
mkdir -p "$RBASH_CACHE_DIR"
@@ -460,6 +425,37 @@ rbash-upgrade() {
source "$target"
}
+# ---- rbash: bash/core/80_public_api.bash ----
+
+rbash-host() {
+ local host="${1:-}"
+ local domain="${2:-}"
+ local color="${3:-}"
+
+ if [ -z "$host" ] || [ -z "$domain" ]; then
+ echo "Usage: rbash-host HOST DOMAIN [COLOR]" >&2
+ echo "Example: rbash-host penguin @macstudio 6" >&2
+ return 1
+ fi
+
+ mkdir -p "$RBASH_HOME"
+
+ {
+ printf 'RHOSTNAME=%q\n' "$host"
+ printf 'RDOMAIN=%q\n' "$domain"
+ if [ -n "$color" ]; then
+ printf 'RCOLOR=%q\n' "$color"
+ fi
+ } > "$RBASH_ENV"
+
+ echo "Wrote $RBASH_ENV"
+
+ # shellcheck source=/dev/null
+ source "$RBASH_ENV"
+
+ __rbash_setup_prompt
+}
+
# ---- rbash: bash/core/90_prompt.bash ----
__rbash_setup_prompt() {
diff --git a/bash/rbashrc.in b/bash/rbashrc.in
index 26f87b9..9623687 100644
--- a/bash/rbashrc.in
+++ b/bash/rbashrc.in
@@ -1,27 +1,16 @@
-#!/usr/bin/env bash
-
-# Generated from bash/rbashrc.in + bash/core/*.
-# Do not edit bash/rbashrc directly.
-
-case $- in
- *i*) ;;
- *) return ;;
-esac
-
-__RBASH_SCRIPT="${BASH_SOURCE[0]}"
-
RBASH_HOME="${RBASH_HOME:-$HOME/.rbash}"
+
RBASH_REMOTE="${RBASH_REMOTE:-https://sgit.k8s.astropenguin.net}"
RBASH_REPO="${RBASH_REPO:-penguin/utils}"
RBASH_REF="${RBASH_REF:-master}"
RBASH_PATH="${RBASH_PATH:-bash}"
-RBASH_CACHE_DIR="$RBASH_HOME/sources"
+RBASH_CACHE_DIR="$RBASH_HOME/cache"
RBASH_CONFIG="$RBASH_HOME/config"
RBASH_ENV="$RBASH_HOME/env"
RBASH_MERGED="$RBASH_CACHE_DIR/merged"
RBASH_BIN="$RBASH_HOME/bin"
-RHOSTNAME="<HOSTNAME>"
-RDOMAIN="<DOMAIN>"
-RCOLOR="<RCOLOR>"
+RHOSTNAME="${RHOSTNAME:-\\u}"
+RDOMAIN="${RDOMAIN:-@$(hostname -s)}"
+RCOLOR="${RCOLOR:-6}"
\ No newline at end of file