diff options
Diffstat (limited to 'wordpress/export-json.bash')
-rw-r--r-- | wordpress/export-json.bash | 53 |
1 files changed, 28 insertions, 25 deletions
diff --git a/wordpress/export-json.bash b/wordpress/export-json.bash index f146c19..714946e 100644 --- a/wordpress/export-json.bash +++ b/wordpress/export-json.bash | |||
@@ -65,34 +65,33 @@ | |||
65 | arg1_to_env0() | 65 | arg1_to_env0() |
66 | { | 66 | { |
67 | case "$1" in | 67 | case "$1" in |
68 | *[^a-zA-Z0-9_=]* | *=*=* ) | 68 | *=*=* ) |
69 | echo "Error: invalid variable: '$1'" >&2 | 69 | set -- "${1#*=}" |
70 | echo "Error: invalid variable: ${1@Q}" >&2 | ||
71 | return 30 | ||
72 | ;; | ||
73 | *[^a-zA-Z0-9_=]* ) | ||
74 | echo "Error: invalid variable: ${1@Q}" >&2 | ||
70 | return 10 | 75 | return 10 |
71 | ;; | 76 | ;; |
72 | [a-zA-Z_]* ) | 77 | [a-zA-Z_]* ) |
73 | set -- "${1#*=}" "${1%%=*}" | ||
74 | ;; | 78 | ;; |
75 | * ) | 79 | * ) |
76 | echo "Error: invalid variable: '$1'" >&2 | 80 | echo "Error: invalid variable: ${1@Q}" >&2 |
77 | return 20 | 81 | return 20 |
78 | ;; | 82 | ;; |
79 | esac | 83 | esac |
84 | set -- "${1##*=}" "${1%%=*}" | ||
80 | if [ -v "$2" ] | 85 | if [ -v "$2" ] |
81 | then | 86 | then |
82 | printf '%s=%s\0' "$1" "${!2}" | 87 | printf '%s=%s\0' "$1" "${!2}" |
83 | else | 88 | else |
84 | echo "Warning: ignoring unset variable: '$2'" >&2 | 89 | echo "Warning: ignoring unset variable: ${2@Q}" >&2 |
85 | fi | 90 | fi |
86 | } | 91 | } |
87 | 92 | ||
88 | # for_each - environmentally-hygienic loop | 93 | # Hygienic loop. Doesn't touch the shell |
89 | # | 94 | # environment. |
90 | # The first argument is de-quoted as a command | ||
91 | # evaluated once against each of the other | ||
92 | # supplied arguments, in order, aborting if the | ||
93 | # command returns an error. | ||
94 | # | ||
95 | # Doesn't touch the bash environment. | ||
96 | for_each() | 95 | for_each() |
97 | { | 96 | { |
98 | while [ $# -ge 2 ] | 97 | while [ $# -ge 2 ] |
@@ -102,11 +101,6 @@ for_each() | |||
102 | done | 101 | done |
103 | } | 102 | } |
104 | 103 | ||
105 | export_to_env0() | ||
106 | { | ||
107 | for_each arg1_to_env0 "$@" | ||
108 | } | ||
109 | |||
110 | to_JSON_all() | 104 | to_JSON_all() |
111 | { | 105 | { |
112 | jq -s 'add' < \ | 106 | jq -s 'add' < \ |
@@ -190,11 +184,20 @@ json_encode_string() | |||
190 | 184 | ||
191 | to_JSON() | 185 | to_JSON() |
192 | { | 186 | { |
193 | case $# in | 187 | case "$#$1" in |
194 | 0) | 188 | 0 ) |
195 | to_JSON_all -a | 189 | printf \ |
190 | '%s\n' \ | ||
191 | 'usage: to_JSON -a' \ | ||
192 | ' to_JSON -A' \ | ||
193 | ' to_JSON <variable name> [...]' \ | ||
194 | >&2 | ||
195 | return -1 | ||
196 | ;; | 196 | ;; |
197 | *) | 197 | 1-a | 1-A ) |
198 | to_JSON_all $1 | ||
199 | ;; | ||
200 | * ) | ||
198 | for_each to_JSON1 "$@" | 201 | for_each to_JSON1 "$@" |
199 | ;; | 202 | ;; |
200 | esac | 203 | esac |
@@ -229,7 +232,7 @@ export_JSON_unsafe() | |||
229 | { | 232 | { |
230 | ( | 233 | ( |
231 | set -o pipefail | 234 | set -o pipefail |
232 | export_to_env0 "$@" | env0_to_JSON | 235 | for_each arg1_to_env0 "$@" | env0_to_JSON |
233 | ) | 236 | ) |
234 | } | 237 | } |
235 | 238 | ||
@@ -237,7 +240,7 @@ safety_pipe() | |||
237 | { | 240 | { |
238 | [ $# -ge 2 ] || return | 241 | [ $# -ge 2 ] || return |
239 | set -- "$(mktemp)" "$@" || return | 242 | set -- "$(mktemp)" "$@" || return |
240 | if (shift 2; "$@") > "$1" | 243 | if "${@:3}" > "$1" |
241 | then | 244 | then |
242 | "$2" < "$1" | 245 | "$2" < "$1" |
243 | else | 246 | else |
@@ -247,7 +250,7 @@ safety_pipe() | |||
247 | 250 | ||
248 | export_JSON() | 251 | export_JSON() |
249 | { | 252 | { |
250 | safety_pipe env0_to_JSON export_to_env0 "$@" | 253 | safety_pipe env0_to_JSON for_each arg1_to_env0 "$@" |
251 | } | 254 | } |
252 | 255 | ||
253 | filter_vars() | 256 | filter_vars() |