Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- # Stop on error
- set -e
- helpfn() {
- echo -e "USAGE: $(basename $0) FILE... [OPTION]..." >&2
- echo -e "Replace environment variables in file(s)." >&2
- echo -e "" >&2
- echo -e "OPTIONS:" >&2
- echo -e " -e, --echo-only Don't modify file in place, output result to stdout." >&2
- echo -e " -h, --help Show this help." >&2
- echo -e " -o, --opening Specify opening character sequence (default: #{{env: )." >&2
- echo -e " -c, --closing Specify closing character sequence (default: }} )." >&2
- }
- CRESET="\e[0m"
- CRED="\e[31m"
- CGREEN="\e[32m"
- CBLUE="\e[34m"
- echo -ne "${CRED}"
- OPTS=`getopt -o ho:c:e --long help,opening:,closing:,debug,echo-only -n 'parse-options' -- "$@"`
- echo -ne "${CRESET}"
- if [ $? != 0 ]; then
- echo -e "${CRED}Failed parsing options.${CRESET}" >&2
- helpfn
- exit 1
- fi
- eval set -- "$OPTS"
- OPENING='#{{env:'
- CLOSING='}}'
- HELP=false
- ECHO_ONLY=false
- DEBUG=false
- while true; do
- case "$1" in
- -h | --help ) HELP=true; break ;;
- -o | --opening ) OPENING="$2"; shift 2 ;;
- -c | --closing ) CLOSING="$2"; shift 2 ;;
- -e | --echo-only ) ECHO_ONLY=true; shift ;;
- --debug ) DEBUG=true; shift ;;
- -- ) shift; break ;;
- * ) break ;;
- esac
- done
- if $HELP; then
- helpfn
- exit 0
- fi
- if [[ $# -lt 1 ]]; then
- echo -ne "${CRED}" >&2
- helpfn
- echo -ne "${CRESET}" >&2
- exit 1
- fi
- #============================================================
- if $DEBUG; then set -x; fi
- substenv_rep() {
- FILE="$1"
- # Find referenced variables
- vars=$(grep -oe "${OPENING}\([A-Za-z0-9_]*\)${CLOSING}" "$FILE" | \
- sort -u | \
- sed "s/${OPENING}\([A-Za-z0-9_]*\)${CLOSING}/\1/")
- echo -e "${CBLUE}$(echo $vars | wc -w) variables found: $(echo $vars).${CRESET}" >&2
- tmpfile="$(dirname $FILE)/.$(basename $FILE).substenv-ng~"
- cp "$FILE" "$tmpfile"
- for var in $vars; do
- value=$(printenv $var | sed 's/\//\\\//g')
- sed -i "s/${OPENING}${var}${CLOSING}/${value}/g" "$tmpfile"
- done
- cat "$tmpfile"
- rm "$tmpfile"
- }
- while [[ $# -ge 1 ]]; do
- FILE="$1"
- orig="$(dirname $FILE)/.$(basename $FILE).orig"
- if [[ ! -f "$orig" ]]; then
- if [[ ! -f "$FILE" ]]; then
- echo -e "${CRED}No file found: \"${FILE}\".${CRESET}" >&2
- exit 1
- fi
- cp "$FILE" "$orig"
- else
- echo -e "${CBLUE}Starting from \"$orig\".${CRESET}" >&2
- fi
- if $ECHO_ONLY; then
- substenv_rep "$orig" $OPENING $CLOSING
- else
- substenv_rep "$orig" $OPENING $CLOSING > "$FILE"
- echo -ne "${CGREEN}Replaced environment variables in \"$FILE\". " >&2
- echo -e "${CBLUE}Original backed up to \"$orig\".${CRESET}" >&2
- fi
- shift
- done
Add Comment
Please, Sign In to add comment