#!/usr/bin/env bash set -euo pipefail usage() { cat <<'EOF' Usage: describe-env-values.sh [KEY...] Prints a non-secret status for each requested key in . EOF } if [[ $# -lt 2 ]]; then usage >&2 exit 1 fi env_file="$1" shift if [[ ! -f "${env_file}" ]]; then echo "Missing env file: ${env_file}" >&2 exit 1 fi read_env_value() { local key="$1" local value value="$( awk -F= -v key="${key}" ' /^[[:space:]]*#/ || index($0, "=") == 0 { next } { name = $1 sub(/^[[:space:]]*export[[:space:]]+/, "", name) gsub(/^[[:space:]]+|[[:space:]]+$/, "", name) if (name == key) { value = substr($0, index($0, "=") + 1) } } END { print value } ' "${env_file}" )" value="${value%$'\r'}" value="${value#"${value%%[![:space:]]*}"}" value="${value%"${value##*[![:space:]]}"}" if [[ "${value}" == \"*\" && "${value}" == *\" ]]; then value="${value#\"}" value="${value%\"}" elif [[ "${value}" == \'*\' && "${value}" == *\' ]]; then value="${value#\'}" value="${value%\'}" fi printf '%s' "${value}" } describe_value() { local key="$1" local value="$2" if [[ -z "${value}" ]]; then printf '%s: missing\n' "${key}" elif [[ "${value}" == placeholder || "${value}" == replace-with-* || "${value}" == *changeme* || "${value}" == *change-me* ]]; then printf '%s: placeholder\n' "${key}" else printf '%s: invalid prefix\n' "${key}" fi } for key in "$@"; do describe_value "${key}" "$(read_env_value "${key}")" done