Not sure if this helps, but you might try passing ksh93 an array:
OPT1=xxx
OPT2=YYY
PARMS=( "-J $OPT1" "-g $OPT2" )
main.ksh ${PARMS[@]}
i didn't get to verify this very closely, but i'm also on AIX 7.1 and they
finally have a reasonably current version of ksh93. You can forget their 88
implementation - pure frustration.
You may find that if you have to go between 7.1 systems and older systems,
you'll have to use the lowest common denominator (unless you install AST ksh on
the system) because IBM has ksh93 that is *actually* from '93 in systems lower
than 7.1.
take care,
josh
On Oct 14, 2013, at 6:05 PM, "Tom K." <[email protected]> wrote:
> Hey David,
>
> Thanks very much.
>
> No luck with the -k option unfortunately. Tried a targeted approach as you
> suggested. When that didn't work, tried it in a number of places instead. (
> Sorry, less then scientific, I know ). I hope -k doesn't toggle and that I
> didn't make any typos. Not sure if that plays a part but the two shells are
> on IBM AIX 7.1 systems. Either way, same result as earlier:
>
> /usr/bin/ksh (ksh88) Version M-11/16/88f
>
> #
> #
> #
> # ./main.ksh
> NARG=|0|
> UARG=|me|
> GARG=|/folder/file|
> JARG=|This is my Option|
>
> NARG=|1|
> UARG=|me|
> GARG=|/folder/file|
> JARG=|This is my Option|
>
> NARG=|2|
> UARG=|"me"|
> GARG=||
> JARG=|"This|
>
> NARG=|3|
> UARG=| "me" -J "This is my Option" -g "/folder/file"|
> GARG=||
> JARG=||
>
> NARG=|3.1|
> UARG=| "me" -J "This is my Option" -g "/folder/file"|
> GARG=||
> JARG=||
>
> NARG=|3.2|
> UARG=| "me" -J "This is my Option" -g "/folder/file"|
> GARG=||
> JARG=||
>
> NARG=|4|
> UARG=|"me"|
> GARG=||
> JARG=|"This|
>
> ( x=4 y=16 )
> #
> #
> #
> #
> # cat script.ksh
> #!/usr/bin/ksh93 -k
> #!/usr/bin/ksh -k # To manually switch for testing.
>
>
> while getopts n:u:g:J: option; do
> case "${option}" in
> n) NARG="$OPTARG"
> ;;
> u) UARG=$OPTARG
> ;;
> g) GARG="$OPTARG"
> ;;
> J) JARG="$OPTARG"
> ;;
> [?]) print >&2 "Good Luck!";
> exit 1
> ;;
> esac
> done
>
>
> print "NARG=|$NARG|";
> print "UARG=|$UARG|";
> print "GARG=|$GARG|";
> print "JARG=|$JARG|";
> print;
> #
> #
> #
> # cat main.ksh
> #!/usr/bin/ksh93 -k
>
> OPT1="This is my Option";
> OPT2="/folder/file";
>
> PARMS="-u \"me\" -J \"$OPT1\" -g \"$OPT2\"";
>
> ./script.ksh -n 0 -u me -J "$OPT1" -g "$OPT2";
> eval ./script.ksh -n 1 "$PARMS";
> ./script.ksh -n 2 ${PARMS};
> ./script.ksh -n 3 "${PARMS}";
> /usr/bin/ksh -k ./script.ksh -n 3.1 "${PARMS}";
> /usr/bin/ksh93 -k ./script.ksh -n 3.2 "${PARMS}";
> ./script.ksh -n 4 $PARMS;
>
> # Supported?
> typeset -C comv;
>
> comv.x=4;
> comv.y=16;
>
> print $comv;
> #
> #
> #
> #
>
> I've looked up the -k on a Linux system I've happen to have had a shell on
> and notice it was marked as (Obsolete) in JM 93t+ but not yet on the IBM
> systems I'm using. This is good, in a backwards soft of way, as they'll be
> some compatability using -k:
>
> -k (Obsolete). All variable assignment arguments are
> placed in the
> environment for a command, not just those that precede
> the command
> name.
>
> The Linux system has:
>
> # echo ${.sh.version}
> Version JM 93t+ 2010-06-21
> #
>
> I suppose could try to ldd the thing to see linking etc.
> Cheers, Tom
> ---------------------------------------------------------
>
>
> On 10/14/2013 10:36 AM, David Korn wrote:
>> The problem is that by default, name=value pairs are only recognized when
>> they preceed the command name. You can use the -k startup options to allow
>> name=value pairs any where on the command line.
>>
>> Thus,
>> ksh -k ./script.ksh -n 3 "${PARMS}"
>> should also work. The ksh -k could be embedded in script.ksh using #! on
>> systems that support #!.
>>
>>
>> On Mon, Oct 14, 2013 at 10:10 AM, Tom K. <[email protected]> wrote:
>> Great. Thanks.
>>
>> The eval worked. I'll try the compound option as well.
>>
>> May need to run this with ksh88, so I might not be able to use compound
>> vars. (Apologies. Should have mentioned earlier.)
>>
>> Cheers, Tom
>> ---------------------------------------------------------
>>
>>
>> On 10/14/2013 6:48 AM, Danny Weldon wrote:
>> These both worked for me:
>>
>> eval ./script.ksh -n 3 "${PARMS}";
>> eval ./script.ksh -n 4 $PARMS;
>>
>> On 14 October 2013 13:25, Cedric Blancher <[email protected]> wrote:
>> On 14 October 2013 04:59, Tom K. <[email protected]> wrote:
>> Hey Gents,
>>
>> When trying to pass a variable of paramters to another script, to reduce
>> amount of code:
>>
>> OPT1="This is my Option";
>> OPT2="/folder/file";
>> PARMS="-u \"me\" -J \"$OPT1\" -g \"$OPT2\"";
>>
>> then passing it in like this:
>>
>> ./script.ksh -n 1 "$PARMS";
>>
>> I get this:
>>
>> UARG=| "me" -J "This is my Option" -g "/folder/file"|
>>
>> Or I get this:
>>
>> UARG=|"me"|
>>
>> when I try to pass it in this manner:
>>
>> ./script.ksh -n 2 ${PARMS};
>>
>> Looks like it manages to grab a part of what's in $PARMS but not the rest of
>> the string. Was curious about this behaviour and if KSH had any way to make
>> this work? Full code is below. Tried a couple of variations including '
>> but no luck. This is an older KSH93 version. I don't have the option of
>> changing this version unfortunately.
>> # echo ${.sh.version}
>> Version M 93t+ 2009-05-01
>> Does read -C work in ksh93t+?
>>
>> if it does then you could pass complex data via compound variables,
>> i.e. print compound variable via print -C and read the data into
>> another shell instance through read -C.
>>
>> Ced
>> --
>> Cedric Blancher <[email protected]>
>> Institute Pasteur
>> _______________________________________________
>> ast-users mailing list
>> [email protected]
>> http://lists.research.att.com/mailman/listinfo/ast-users
>>
>>
>>
>> _______________________________________________
>> ast-users mailing list
>> [email protected]
>> http://lists.research.att.com/mailman/listinfo/ast-users
>>
>
> _______________________________________________
> ast-users mailing list
> [email protected]
> http://lists.research.att.com/mailman/listinfo/ast-users
_______________________________________________
ast-users mailing list
[email protected]
http://lists.research.att.com/mailman/listinfo/ast-users