Steffen Nurpmeso <stef...@sdaoden.eu> wrote: > trondd wrote in <49f29107642e86c17283b0582a9f09f4.squir...@mail.kagu-tsu\ > chi.com>: > |On Sun, November 3, 2019 12:02 pm, trondd wrote: > |> On Sun, November 3, 2019 6:27 am, Florian Obser wrote: > |>> On Sun, Nov 03, 2019 at 12:21:59PM +0100, Antoine Jacoutot wrote: > |>>> On Sun, Nov 03, 2019 at 12:16:56PM +0100, Florian Obser wrote: > ... > |I've tested the diff and it works as expected in my environment. I don't > |need a username and password for proxy access but it populates the > |rc.firsttime file fine. > | > |The quote() function is actually pretty simple. > | > |quote() ( > | # Since this is a subshell we won't pollute the calling namespace. > | for _a; do > | # alias string to Q, does escaping and quoting > | alias Q=$_a; > | # set variable back to value of alias > | _a=$(alias Q); > | # print variable, chopping off alias definition > | # no newline, don't substitute the escape sequences > | # we made above > | print -rn -- " ${_a#Q=}" > | done | sed '1s/ //' > | echo > |) > > I felt a bit undecided from your first mail on, maybe also because > of your mailer, but wanted to post the all-compatible all-shell > quote of and from Robert Elz here. > > #@ Round trip quote strings in POSIX shell. E.g., > #@ set -- x 'a \ b' "foo'" "\\'b\\a\\r\\" AƤ > #@ printf "%s: <%s><%s><%s><%s><%s>\n" "$#" "${1}" "${2}" "${3}" "$4" > "$5" > #@ saved_parameters=`quote_rndtrip "$@"` > #@ eval "set -- $saved_parameters" > #@ printf "%s: <%s><%s><%s><%s><%s>\n" "$#" "${1}" "${2}" "${3}" "$4" > "$5" > # > # 2017 Robert Elz (kre). > > ... > > # Though slower use a subshell version instead of properly restoring $IFS > # and flags, as elder shells may not be able to properly restore flags via > # "set +o" as later standardized in POSIX, and it seems overkill to handle > # all possible forms of output "set +o" may or may not actually generate. > quote__rndtrip() ( > case "$1" in > *\'*) ;; > *) printf "'%s'" "$1"; return 0;; > esac > a="$1" s= e= > while case "$a" in > \'*) a=${a#?}; s="${s}\\\\'";; > *\') a=${a%?}; e="${e}\\\\'";; > '') printf "${s}${e}"; exit 0;; > *) false;; > esac > do > continue > done > IFS=\' > set -f > set -- $a > r="${1}" > shift > for a > do > r="${r}'\\''${a}" > done > printf "${s}'%s'${e}" "${r}" > exit 0 > ) > > quote_rndtrip() ( > j= > for i > do > [ -n "$j" ] && printf ' ' > j=' ' > quote__rndtrip "$i" > done > ) > > quote_string() ( > j= > for i > do > [ -n "$j" ] && printf '\\ ' > j=' ' > quote__rndtrip "$i" > done > ) > > > |$ export "test=fancy ' stuff #and not a comment" > |$ ./quote.ksh > |$ cat test.out > | > |export 'http_proxy=fancy '\'' stuff #and not a comment' > | > |$ export "test=even > |> this works #" > |$ ./quote.ksh > |$ cat test.out > | > |export 'http_proxy=even > |this works #' > > Of course, if in install.sub there is already your quote function, > that surely is preferred. > > Good night, > > --steffen > | > |Der Kragenbaer, The moon bear, > |der holt sich munter he cheerfully and one by one > |einen nach dem anderen runter wa.ks himself off > |(By Robert Gernhardt)
To clarify, it's not my quote function. It's been in install.sub since 2010 [0] and was used when http_proxy was added there [1]. I figured it was a good idea so pulled it in for sysupgrade as well. [0] http://cvsweb.openbsd.org/src/distrib/miniroot/install.sub?rev=1.628&content-type=text/x-cvsweb-markup [1] http://cvsweb.openbsd.org/src/distrib/miniroot/install.sub?rev=1.1058&content-type=text/x-cvsweb-markup Tim.