first build nexus
This commit is contained in:
174
openclaw/xingyao/scripts/get-all-docker-apps.sh
Normal file
174
openclaw/xingyao/scripts/get-all-docker-apps.sh
Normal file
@@ -0,0 +1,174 @@
|
||||
#!/bin/bash
|
||||
# 获取所有服务器上Docker环境运行的应用列表
|
||||
|
||||
set -e
|
||||
|
||||
echo "🐳 Docker应用列表 - 所有服务器"
|
||||
echo "================================"
|
||||
echo "生成时间: $(date '+%Y-%m-%d %H:%M:%S')"
|
||||
echo ""
|
||||
|
||||
# 服务器列表
|
||||
SERVERS=("macmini" "ubuntu1" "ubuntu2" "NAS")
|
||||
|
||||
# 颜色定义
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# 统计变量
|
||||
TOTAL_APPS=0
|
||||
TOTAL_CONTAINERS=0
|
||||
|
||||
# 检查服务器连接函数
|
||||
check_server_connection() {
|
||||
local server="$1"
|
||||
echo -n "检查服务器 $server 连接... "
|
||||
|
||||
if ssh -q -o ConnectTimeout=5 -o BatchMode=yes "$server" "exit" 2>/dev/null; then
|
||||
echo -e "${GREEN}✓ 连接正常${NC}"
|
||||
return 0
|
||||
else
|
||||
echo -e "${RED}✗ 连接失败${NC}"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 获取Docker应用信息函数
|
||||
get_docker_apps() {
|
||||
local server="$1"
|
||||
|
||||
echo ""
|
||||
echo -e "${BLUE}====================${NC}"
|
||||
echo -e "${YELLOW}服务器: $server${NC}"
|
||||
echo -e "${BLUE}====================${NC}"
|
||||
|
||||
# 检查Docker是否安装
|
||||
if ! ssh "$server" "command -v docker &> /dev/null"; then
|
||||
echo "❌ Docker未安装"
|
||||
return
|
||||
fi
|
||||
|
||||
# 检查Docker服务状态
|
||||
DOCKER_STATUS=$(ssh "$server" "systemctl is-active docker 2>/dev/null || echo 'unknown'")
|
||||
if [ "$DOCKER_STATUS" != "active" ]; then
|
||||
echo "⚠️ Docker服务状态: $DOCKER_STATUS"
|
||||
fi
|
||||
|
||||
# 获取运行中的容器
|
||||
echo ""
|
||||
echo "📦 运行中的容器:"
|
||||
echo "--------------"
|
||||
|
||||
RUNNING_CONTAINERS=$(ssh "$server" "docker ps --format 'table {{.Names}}\t{{.Image}}\t{{.Status}}\t{{.Ports}}' 2>/dev/null || echo '无运行中的容器'")
|
||||
echo "$RUNNING_CONTAINERS"
|
||||
|
||||
# 统计运行中的容器数量
|
||||
RUNNING_COUNT=$(ssh "$server" "docker ps -q 2>/dev/null | wc -l || echo 0")
|
||||
echo "运行中: $RUNNING_COUNT 个容器"
|
||||
|
||||
# 获取所有容器(包括停止的)
|
||||
echo ""
|
||||
echo "📋 所有容器:"
|
||||
echo "-----------"
|
||||
|
||||
ALL_CONTAINERS=$(ssh "$server" "docker ps -a --format 'table {{.Names}}\t{{.Image}}\t{{.Status}}' 2>/dev/null || echo '无法获取容器列表'")
|
||||
echo "$ALL_CONTAINERS"
|
||||
|
||||
# 统计所有容器数量
|
||||
ALL_COUNT=$(ssh "$server" "docker ps -a -q 2>/dev/null | wc -l || echo 0")
|
||||
echo "总计: $ALL_COUNT 个容器"
|
||||
|
||||
# 获取docker-compose应用
|
||||
echo ""
|
||||
echo "🎯 Docker Compose应用:"
|
||||
echo "-------------------"
|
||||
|
||||
# 查找常见的docker-compose目录
|
||||
COMPOSE_DIRS=$(ssh "$server" "find /home /opt /usr/local -name 'docker-compose.yml' -o -name 'docker-compose.yaml' 2>/dev/null | head -20 || echo '未找到docker-compose文件'")
|
||||
|
||||
if [ -n "$COMPOSE_DIRS" ] && [ "$COMPOSE_DIRS" != "未找到docker-compose文件" ]; then
|
||||
echo "找到的docker-compose目录:"
|
||||
echo "$COMPOSE_DIRS" | while read dir; do
|
||||
APP_NAME=$(basename $(dirname "$dir"))
|
||||
echo " 📁 $APP_NAME - $dir"
|
||||
done
|
||||
|
||||
# 统计docker-compose应用数量
|
||||
COMPOSE_COUNT=$(echo "$COMPOSE_DIRS" | wc -l)
|
||||
echo "总计: $COMPOSE_COUNT 个docker-compose应用"
|
||||
else
|
||||
echo "未找到docker-compose应用"
|
||||
fi
|
||||
|
||||
# 获取镜像列表
|
||||
echo ""
|
||||
echo "🖼️ Docker镜像:"
|
||||
echo "-------------"
|
||||
|
||||
IMAGES=$(ssh "$server" "docker images --format 'table {{.Repository}}\t{{.Tag}}\t{{.Size}}' 2>/dev/null | head -10 || echo '无法获取镜像列表'")
|
||||
echo "$IMAGES"
|
||||
|
||||
# 统计镜像数量
|
||||
IMAGE_COUNT=$(ssh "$server" "docker images -q 2>/dev/null | wc -l || echo 0")
|
||||
echo "总计: $IMAGE_COUNT 个镜像"
|
||||
|
||||
# 更新统计
|
||||
TOTAL_CONTAINERS=$((TOTAL_CONTAINERS + ALL_COUNT))
|
||||
TOTAL_APPS=$((TOTAL_APPS + COMPOSE_COUNT))
|
||||
|
||||
echo ""
|
||||
echo "📊 服务器 $server 统计:"
|
||||
echo " • 运行中容器: $RUNNING_COUNT"
|
||||
echo " • 所有容器: $ALL_COUNT"
|
||||
echo " • Docker Compose应用: $COMPOSE_COUNT"
|
||||
echo " • Docker镜像: $IMAGE_COUNT"
|
||||
}
|
||||
|
||||
# 主程序
|
||||
echo "🔍 开始检查服务器连接..."
|
||||
echo ""
|
||||
|
||||
for server in "${SERVERS[@]}"; do
|
||||
if check_server_connection "$server"; then
|
||||
get_docker_apps "$server"
|
||||
else
|
||||
echo ""
|
||||
echo "⏭️ 跳过服务器 $server"
|
||||
echo ""
|
||||
fi
|
||||
done
|
||||
|
||||
# 生成总结报告
|
||||
echo ""
|
||||
echo -e "${GREEN}📈 总体统计报告${NC}"
|
||||
echo "================================"
|
||||
echo "检查的服务器数量: ${#SERVERS[@]}"
|
||||
echo "总计容器数量: $TOTAL_CONTAINERS"
|
||||
echo "总计Docker Compose应用: $TOTAL_APPS"
|
||||
echo ""
|
||||
echo "🔄 最近检查的应用状态:"
|
||||
|
||||
# 从配置文件获取应用列表
|
||||
if [ -f "docker-apps.yaml" ]; then
|
||||
echo "从配置文件读取的应用列表:"
|
||||
grep -E "name:|server:" docker-apps.yaml | while read line; do
|
||||
echo " $line"
|
||||
done
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "🔧 常用命令:"
|
||||
echo " • 查看容器日志: docker logs <容器名>"
|
||||
echo " • 重启容器: docker restart <容器名>"
|
||||
echo " • 进入容器: docker exec -it <容器名> /bin/bash"
|
||||
echo " • 查看容器状态: docker stats"
|
||||
echo ""
|
||||
echo "📝 备注:"
|
||||
echo " • 绿色 ✓ 表示连接正常"
|
||||
echo " • 红色 ✗ 表示连接失败"
|
||||
echo " • 黄色 ⚠️ 表示需要注意的状态"
|
||||
echo ""
|
||||
echo "✅ 报告生成完成"
|
||||
262
openclaw/xingyao/scripts/safe-edit.sh
Normal file
262
openclaw/xingyao/scripts/safe-edit.sh
Normal file
@@ -0,0 +1,262 @@
|
||||
#!/bin/bash
|
||||
# 安全文件编辑脚本
|
||||
# 基于2026-03-13文件编辑失败的经验教训
|
||||
|
||||
set -e
|
||||
|
||||
# 颜色定义
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# 显示帮助信息
|
||||
show_help() {
|
||||
echo "🔧 安全文件编辑脚本"
|
||||
echo "======================"
|
||||
echo "用法: $0 <文件路径> <旧文本> <新文本>"
|
||||
echo ""
|
||||
echo "选项:"
|
||||
echo " -h, --help 显示帮助信息"
|
||||
echo " -v, --verbose 详细模式"
|
||||
echo " -b, --backup 保留备份文件(默认编辑成功后删除)"
|
||||
echo " -f, --force 强制编辑(不检查匹配次数)"
|
||||
echo ""
|
||||
echo "示例:"
|
||||
echo " $0 config.yaml 'port: 8080' 'port: 9090'"
|
||||
echo " $0 --verbose README.md '旧版本' '新版本'"
|
||||
echo ""
|
||||
echo "安全特性:"
|
||||
echo " • 自动备份原文件"
|
||||
echo " • 验证文本匹配"
|
||||
echo " • 失败时自动恢复"
|
||||
echo " • 编辑日志记录"
|
||||
}
|
||||
|
||||
# 初始化变量
|
||||
VERBOSE=0
|
||||
KEEP_BACKUP=0
|
||||
FORCE=0
|
||||
FILE=""
|
||||
OLD_TEXT=""
|
||||
NEW_TEXT=""
|
||||
|
||||
# 解析参数
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
-h|--help)
|
||||
show_help
|
||||
exit 0
|
||||
;;
|
||||
-v|--verbose)
|
||||
VERBOSE=1
|
||||
shift
|
||||
;;
|
||||
-b|--backup)
|
||||
KEEP_BACKUP=1
|
||||
shift
|
||||
;;
|
||||
-f|--force)
|
||||
FORCE=1
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
if [ -z "$FILE" ]; then
|
||||
FILE="$1"
|
||||
elif [ -z "$OLD_TEXT" ]; then
|
||||
OLD_TEXT="$1"
|
||||
elif [ -z "$NEW_TEXT" ]; then
|
||||
NEW_TEXT="$1"
|
||||
else
|
||||
echo -e "${RED}错误:参数过多${NC}"
|
||||
show_help
|
||||
exit 1
|
||||
fi
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# 检查必要参数
|
||||
if [ -z "$FILE" ] || [ -z "$OLD_TEXT" ] || [ -z "$NEW_TEXT" ]; then
|
||||
echo -e "${RED}错误:缺少必要参数${NC}"
|
||||
show_help
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查文件是否存在
|
||||
if [ ! -f "$FILE" ]; then
|
||||
echo -e "${RED}错误:文件不存在: $FILE${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 详细模式输出
|
||||
log() {
|
||||
if [ $VERBOSE -eq 1 ]; then
|
||||
echo -e "${BLUE}[INFO]${NC} $1"
|
||||
fi
|
||||
}
|
||||
|
||||
error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1"
|
||||
}
|
||||
|
||||
success() {
|
||||
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
||||
}
|
||||
|
||||
warning() {
|
||||
echo -e "${YELLOW}[WARNING]${NC} $1"
|
||||
}
|
||||
|
||||
# 主函数
|
||||
main() {
|
||||
echo "🔧 开始安全文件编辑"
|
||||
echo "======================"
|
||||
echo "文件: $FILE"
|
||||
echo "旧文本: \"$OLD_TEXT\""
|
||||
echo "新文本: \"$NEW_TEXT\""
|
||||
echo ""
|
||||
|
||||
# 步骤1:备份原文件
|
||||
BACKUP_FILE="${FILE}.backup.$(date +%Y%m%d_%H%M%S)"
|
||||
log "创建备份: $BACKUP_FILE"
|
||||
cp "$FILE" "$BACKUP_FILE"
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
error "备份失败"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 步骤2:检查文件权限
|
||||
PERMISSIONS=$(stat -f "%Sp" "$FILE")
|
||||
log "文件权限: $PERMISSIONS"
|
||||
|
||||
# 步骤3:验证文本匹配
|
||||
log "验证文本匹配..."
|
||||
|
||||
# 检查匹配次数
|
||||
MATCH_COUNT=$(grep -c "$OLD_TEXT" "$FILE")
|
||||
log "找到 $MATCH_COUNT 处匹配"
|
||||
|
||||
if [ $MATCH_COUNT -eq 0 ]; then
|
||||
error "未找到匹配文本"
|
||||
echo "建议:"
|
||||
echo " 1. 检查文本是否完全匹配(包括空格和换行符)"
|
||||
echo " 2. 使用 cat -A 查看文件特殊字符"
|
||||
echo " 3. 考虑使用 write 工具重新创建文件"
|
||||
|
||||
if [ $FORCE -eq 0 ]; then
|
||||
# 恢复备份
|
||||
log "恢复备份文件"
|
||||
cp "$BACKUP_FILE" "$FILE"
|
||||
exit 1
|
||||
else
|
||||
warning "强制模式:继续编辑"
|
||||
fi
|
||||
elif [ $MATCH_COUNT -gt 1 ] && [ $FORCE -eq 0 ]; then
|
||||
warning "找到 $MATCH_COUNT 处匹配,可能不精确"
|
||||
echo "匹配位置:"
|
||||
grep -n "$OLD_TEXT" "$FILE"
|
||||
echo ""
|
||||
echo "建议:"
|
||||
echo " 1. 使用更精确的匹配文本"
|
||||
echo " 2. 使用 -f 参数强制编辑"
|
||||
echo " 3. 或手动编辑文件"
|
||||
|
||||
# 恢复备份
|
||||
log "恢复备份文件"
|
||||
cp "$BACKUP_FILE" "$FILE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 步骤4:显示匹配上下文
|
||||
if [ $VERBOSE -eq 1 ]; then
|
||||
echo "匹配上下文:"
|
||||
grep -A2 -B2 "$OLD_TEXT" "$FILE" | cat -A
|
||||
echo ""
|
||||
fi
|
||||
|
||||
# 步骤5:执行编辑
|
||||
log "执行编辑操作..."
|
||||
edit "$FILE" "$OLD_TEXT" "$NEW_TEXT"
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
error "编辑失败"
|
||||
log "恢复备份文件"
|
||||
cp "$BACKUP_FILE" "$FILE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 步骤6:验证编辑结果
|
||||
log "验证编辑结果..."
|
||||
|
||||
# 检查新文本是否存在
|
||||
NEW_COUNT=$(grep -c "$NEW_TEXT" "$FILE")
|
||||
if [ $NEW_COUNT -eq 0 ]; then
|
||||
error "新文本未找到,编辑可能失败"
|
||||
log "恢复备份文件"
|
||||
cp "$BACKUP_FILE" "$FILE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查旧文本是否还存在
|
||||
OLD_COUNT=$(grep -c "$OLD_TEXT" "$FILE")
|
||||
if [ $OLD_COUNT -gt 0 ]; then
|
||||
warning "仍有 $OLD_COUNT 处旧文本存在"
|
||||
fi
|
||||
|
||||
# 步骤7:文件完整性检查
|
||||
log "检查文件完整性..."
|
||||
|
||||
# 检查文件大小
|
||||
ORIG_SIZE=$(stat -f%z "$BACKUP_FILE")
|
||||
NEW_SIZE=$(stat -f%z "$FILE")
|
||||
log "原始大小: $ORIG_SIZE 字节"
|
||||
log "新大小: $NEW_SIZE 字节"
|
||||
|
||||
if [ $NEW_SIZE -eq 0 ]; then
|
||||
error "文件大小为0,编辑可能损坏了文件"
|
||||
log "恢复备份文件"
|
||||
cp "$BACKUP_FILE" "$FILE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 步骤8:清理和记录
|
||||
if [ $KEEP_BACKUP -eq 0 ]; then
|
||||
log "删除备份文件"
|
||||
rm "$BACKUP_FILE"
|
||||
else
|
||||
log "保留备份文件: $BACKUP_FILE"
|
||||
fi
|
||||
|
||||
# 记录编辑日志
|
||||
LOG_FILE="$HOME/.openclaw/workspace/managed-systems/logs/edit-log.md"
|
||||
mkdir -p "$(dirname "$LOG_FILE")"
|
||||
|
||||
echo "## $(date '+%Y-%m-%d %H:%M:%S')" >> "$LOG_FILE"
|
||||
echo "- **文件**: $FILE" >> "$LOG_FILE"
|
||||
echo "- **操作**: 替换文本" >> "$LOG_FILE"
|
||||
echo "- **匹配数**: $MATCH_COUNT" >> "$LOG_FILE"
|
||||
echo "- **结果**: 成功" >> "$LOG_FILE"
|
||||
echo "" >> "$LOG_FILE"
|
||||
|
||||
# 步骤9:完成
|
||||
success "编辑成功完成"
|
||||
echo ""
|
||||
echo "📊 编辑统计:"
|
||||
echo " • 匹配位置: $MATCH_COUNT 处"
|
||||
echo " • 新文本出现: $NEW_COUNT 次"
|
||||
echo " • 文件大小变化: $ORIG_SIZE → $NEW_SIZE 字节"
|
||||
|
||||
if [ $KEEP_BACKUP -eq 1 ]; then
|
||||
echo " • 备份文件: $BACKUP_FILE"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "✅ 安全编辑流程完成"
|
||||
}
|
||||
|
||||
# 运行主函数
|
||||
main "$@"
|
||||
150
openclaw/xingyao/scripts/test-vaultwarden-search.sh
Normal file
150
openclaw/xingyao/scripts/test-vaultwarden-search.sh
Normal file
@@ -0,0 +1,150 @@
|
||||
#!/bin/bash
|
||||
# vaultwarden搜索测试脚本
|
||||
# 用于验证通过item名称查找凭证的概念
|
||||
|
||||
set -e
|
||||
|
||||
echo "🔍 vaultwarden凭证搜索测试"
|
||||
echo "================================"
|
||||
|
||||
# 检查Bitwarden CLI是否安装
|
||||
if ! command -v bw &> /dev/null; then
|
||||
echo "❌ Bitwarden CLI (bw) 未安装"
|
||||
echo "安装命令: brew install bitwarden-cli"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查jq是否安装(用于JSON解析)
|
||||
if ! command -v jq &> /dev/null; then
|
||||
echo "❌ jq 未安装"
|
||||
echo "安装命令: brew install jq"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 显示当前配置
|
||||
echo "📊 当前Bitwarden CLI配置:"
|
||||
bw status
|
||||
|
||||
echo ""
|
||||
echo "📝 测试流程说明:"
|
||||
echo "1. 配置连接到vaultwarden服务器"
|
||||
echo "2. 使用API密钥登录"
|
||||
echo "3. 搜索指定名称的项目"
|
||||
echo "4. 提取用户名和密码"
|
||||
echo ""
|
||||
|
||||
# 配置vaultwarden服务器(如果未配置)
|
||||
CURRENT_SERVER=$(bw config server | grep -o 'http://[^ ]*' || echo "")
|
||||
if [ -z "$CURRENT_SERVER" ] || [ "$CURRENT_SERVER" != "http://localhost:8080" ]; then
|
||||
echo "⚙️ 配置连接到vaultwarden服务器..."
|
||||
bw config server http://localhost:8080
|
||||
echo "✅ 服务器配置完成: http://localhost:8080"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "🔐 登录说明:"
|
||||
echo "需要以下环境变量:"
|
||||
echo " export BW_CLIENTID='你的客户端ID'"
|
||||
echo " export BW_CLIENTSECRET='你的客户端密钥'"
|
||||
echo ""
|
||||
echo "然后运行: bw login --apikey"
|
||||
echo ""
|
||||
|
||||
# 检查是否已登录
|
||||
SESSION=$(bw status | jq -r '.session')
|
||||
if [ -n "$SESSION" ] && [ "$SESSION" != "null" ]; then
|
||||
echo "✅ 已登录,会话有效"
|
||||
export BW_SESSION="$SESSION"
|
||||
else
|
||||
echo "⚠️ 未登录或会话无效"
|
||||
echo "请先设置环境变量并登录"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 测试搜索功能
|
||||
echo ""
|
||||
echo "🧪 测试搜索功能..."
|
||||
echo ""
|
||||
|
||||
# 函数:搜索项目并显示凭证
|
||||
search_vaultwarden_item() {
|
||||
local item_name="$1"
|
||||
|
||||
echo "搜索项目: $item_name"
|
||||
echo "--------------------------------"
|
||||
|
||||
# 搜索项目
|
||||
ITEM_JSON=$(bw list items --search "$item_name" 2>/dev/null || echo "[]")
|
||||
|
||||
if [ "$ITEM_JSON" = "[]" ] || [ -z "$ITEM_JSON" ]; then
|
||||
echo "❌ 未找到项目: $item_name"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# 解析第一个项目
|
||||
ITEM_COUNT=$(echo "$ITEM_JSON" | jq '. | length')
|
||||
echo "找到 $ITEM_COUNT 个匹配项目"
|
||||
|
||||
# 显示每个项目的基本信息
|
||||
for i in $(seq 0 $((ITEM_COUNT - 1))); do
|
||||
ITEM=$(echo "$ITEM_JSON" | jq ".[$i]")
|
||||
ITEM_ID=$(echo "$ITEM" | jq -r '.id')
|
||||
ITEM_NAME=$(echo "$ITEM" | jq -r '.name')
|
||||
ITEM_TYPE=$(echo "$ITEM" | jq -r '.type')
|
||||
|
||||
echo ""
|
||||
echo "📋 项目 $((i+1)):"
|
||||
echo " ID: $ITEM_ID"
|
||||
echo " 名称: $ITEM_NAME"
|
||||
echo " 类型: $ITEM_TYPE"
|
||||
|
||||
# 如果是登录类型,显示用户名
|
||||
if [ "$ITEM_TYPE" = "1" ]; then
|
||||
USERNAME=$(echo "$ITEM" | jq -r '.login.username // "未设置"')
|
||||
echo " 用户名: $USERNAME"
|
||||
|
||||
# 注意:不直接显示密码,只显示是否有密码
|
||||
HAS_PASSWORD=$(echo "$ITEM" | jq -r '.login.password != null')
|
||||
if [ "$HAS_PASSWORD" = "true" ]; then
|
||||
echo " 密码: [已设置]"
|
||||
else
|
||||
echo " 密码: [未设置]"
|
||||
fi
|
||||
fi
|
||||
|
||||
# 显示备注(如果有)
|
||||
NOTES=$(echo "$ITEM" | jq -r '.notes // ""')
|
||||
if [ -n "$NOTES" ] && [ "$NOTES" != "null" ]; then
|
||||
echo " 备注: $NOTES"
|
||||
fi
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo "✅ 搜索完成"
|
||||
return 0
|
||||
}
|
||||
|
||||
# 如果提供了参数,测试搜索
|
||||
if [ $# -ge 1 ]; then
|
||||
search_vaultwarden_item "$1"
|
||||
else
|
||||
echo "📌 使用方法:"
|
||||
echo " $0 <项目名称>"
|
||||
echo ""
|
||||
echo "示例:"
|
||||
echo " $0 n8n"
|
||||
echo " $0 mysql"
|
||||
echo " $0 ssh"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "================================"
|
||||
echo "测试脚本完成"
|
||||
echo ""
|
||||
echo "⚠️ 安全提醒:"
|
||||
echo "1. 此脚本不在磁盘上存储任何密码"
|
||||
echo "2. 密码只在内存中临时存在"
|
||||
echo "3. 使用后请清理环境变量:"
|
||||
echo " unset BW_SESSION"
|
||||
echo " unset BW_CLIENTID"
|
||||
echo " unset BW_CLIENTSECRET"
|
||||
Reference in New Issue
Block a user