On Wed, 4 Aug 2021 at 22:30, Todd Gruhn <[email protected]> wrote: > > Thanks for the link, Lewis. I have never seen this site. I DID find a > book in PDF format > regarding /bin/ksh programming. > > My new problem is testing user rank/id. > > I want to see if the user is "root" > > if (user != root), then print message and die.
# [[ $(id -u) -eq 0 ]] && echo "you are root" you are root > > This is easy in PERL; I have not done it in /bin/ksh. > I would also like it to execute this test before running the borg command and > spitting out junk... > > On Wed, Aug 4, 2021 at 2:47 PM J. Lewis Muir <[email protected]> wrote: > > > > On 08/02, Chavdar Ivanov wrote: > > > On Mon, 2 Aug 2021 at 14:16, Todd Gruhn <[email protected]> wrote: > > > > > > > > Thanks for the code Matt. > > > > I will try this. > > > > By 'execute' I mean generate > > > > ${cmd} > > > > then execute/do whatever ${cmd} turns out to be. > > > > > > Depending on the contents of cmd, you might have to use > > > > > > eval ${cmd} > > > > Yes, and there's the rub: the corner cases. To correctly build up > > a command like this and execute it where spaces and other special > > characters are parsed correctly, you have to shell-quote cmd before > > passing it to eval. See the "Shell-quoting arbitrary strings" section > > in: > > > > https://www.etalabs.net/sh_tricks.html > > > > For example, here's a test program that correctly constructs and > > executes two commands, touch and ls, to create and list some > > "interesting" test files: > > > > ---- > > #!/bin/ksh > > > > set -e > > > > # https://www.etalabs.net/sh_tricks.html > > quote() { > > printf %s\\n "$1" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/'/" > > } > > > > # https://dwheeler.com/essays/filenames-in-shell.html > > nl=$(printf '\nX') > > nl=${nl%X} > > > > f1='test_a space' > > f2='test_b"double-quote' > > f3="test_c'single-quote" > > f4="test_d${nl}newline" > > f5='test_e\backslash' > > > > f1_quoted=$(quote "$f1") > > f2_quoted=$(quote "$f2") > > f3_quoted=$(quote "$f3") > > f4_quoted=$(quote "$f4") > > f5_quoted=$(quote "$f5") > > > > cmd="touch $f1_quoted $f2_quoted $f3_quoted $f4_quoted $f5_quoted" > > printf 'cmd: %s\n' "$cmd" > > eval "$cmd" > > cmd="ls -B1 $f1_quoted $f2_quoted $f3_quoted $f4_quoted $f5_quoted" > > printf 'cmd: %s\n' "$cmd" > > eval "$cmd" > > ---- > > > > Lewis -- ----
