From 36e3faf3de38d7f55797aee22bc1359da698fb39 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 5 Apr 2023 16:28:41 -0300 Subject: bin/shesc: Add working utility --- bin/shesc | 92 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 bin/shesc (limited to 'bin') diff --git a/bin/shesc b/bin/shesc new file mode 100644 index 0000000..40a72b7 --- /dev/null +++ b/bin/shesc @@ -0,0 +1,92 @@ +#!/bin/sh +set -eu + + +usage() { + cat <<-'EOF' + Usage: + shesc [CONTENT...] + shesc -h + EOF +} + +help() { + cat <<-'EOF' + + Options: + -h, --help show this message + + CONTENT a literal string to be escaped + + + Convert data to/from POSIX sh double quote string escaping. If + CONTENT is not given, get data from STDIN. + + + Examples: + + Escape sh control characters in a string: + + $ printf 'content="%s"\n' "$(shesc '"string" $(dollar "`cmd`") \ ')" + content="\"string\" \$(dollar \"\`cmd\`\") \\ " + + + Escape the content from a file: + + $ shesc < file.conf + EOF +} + + +for flag in "$@"; do + case "$flag" in + --) + break + ;; + --help) + usage + help + exit + ;; + *) + ;; + esac +done + +ENCODE=false +DECODE=false +while getopts 'edh' flag; do + case "$flag" in + e) + ENCODE=true + ;; + d) + DECODE=true + ;; + h) + usage + help + exit + ;; + *) + usage >&2 + exit 2 + ;; + esac +done +shift $((OPTIND - 1)) + + + +esc() { + sed 's|\([\\`"$]\)|\\\1|g' +} + + +if [ $# = 0 ]; then + esc +else + for s in "$@"; do + printf '%s\n' "$s" | esc + done +fi -- cgit v1.2.3