文件预览

list.sh

查看 Cloudflare API 技能包中的文件内容。

文件内容

scripts/tunnels/list.sh

#!/bin/bash
# List Cloudflare tunnels

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/../_lib.sh"

OUTPUT="table"
NAME_FILTER=""

while [[ $# -gt 0 ]]; do
    case $1 in
        --json) OUTPUT="json"; shift ;;
        --quiet) OUTPUT="quiet"; shift ;;
        --name) NAME_FILTER="$2"; shift 2 ;;
        -h|--help)
            echo "Usage: tunnels/list.sh [options]"
            echo ""
            echo "Options:"
            echo "  --name NAME  Filter by tunnel name"
            echo "  --json       Raw JSON output"
            echo "  --quiet      Tunnel IDs only"
            exit 0
            ;;
        *) echo "Unknown option: $1"; exit 1 ;;
    esac
done

TOKEN=$(get_token)
if [ -z "$TOKEN" ]; then
    echo "❌ No API token. Run ./scripts/setup.sh first." >&2
    exit 1
fi

ACCOUNT_ID=$(get_account_id)
if [ -z "$ACCOUNT_ID" ]; then
    echo "❌ Could not get account ID"
    exit 1
fi

QUERY=""
[ -n "$NAME_FILTER" ] && QUERY="?name=$NAME_FILTER"

RESPONSE=$(cf_get "/accounts/$ACCOUNT_ID/cfd_tunnel$QUERY")
check_error "$RESPONSE" || exit 1

case $OUTPUT in
    json)
        echo "$RESPONSE" | jq '.result'
        ;;
    quiet)
        if [ -n "$NAME_FILTER" ]; then
            echo "$RESPONSE" | jq -r '.result[0].id // empty'
        else
            echo "$RESPONSE" | jq -r '.result[].id'
        fi
        ;;
    table)
        echo ""
        printf "%-36s | %-25s | %-10s | %s\n" "TUNNEL ID" "NAME" "STATUS" "CREATED"
        printf "%s\n" "--------------------------------------|---------------------------|------------|------------"
        
        echo "$RESPONSE" | jq -r '.result[] | [.id, .name, .status, (.created_at | split("T")[0])] | @tsv' | \
        while IFS=$'\t' read -r id name status created; do
            printf "%-36s | %-25s | %-10s | %s\n" "$id" "$name" "$status" "$created"
        done
        
        COUNT=$(echo "$RESPONSE" | jq '.result | length')
        echo ""
        echo "Total: $COUNT tunnel(s)"
        ;;
esac