[Glass] run topaz from bash and have access to arguments from topaz smalltalk

Ralph Mauersberger ralph.mauersberger at ewetel.de
Tue Jan 14 07:01:45 PST 2014


Mariano Martinez Peck schrieb:
>
>
>
> On Tue, Jan 14, 2014 at 4:27 AM, Ralph Mauersberger 
> <ralph.mauersberger at ewetel.de <mailto:ralph.mauersberger at ewetel.de>> 
> wrote:
>
>     Hi Mariano,
>
>     to access the arguments from inside topaz you can use a feature of
>     most unix shells called "here document". This concept allows you
>     to embed a document inside your shell script which gets passed to
>     stdin of any executable:
>
>     executable <<LimitString
>     firstCommand
>     nextCommand $1
>     LimitString
>
>     The document is surrounded by any given string. The shell itself
>     will substitute the environment variables and replace them by
>     there values before the document is passed to the executable.
>
>
> Hi Ralph, thanks for the explanation. So indeed, it seems that is what 
> is being used by startSeaside30_adaptor which does:
>
>
> cat << EOF | nohup $GEMSTONE/bin/topaz -l -e $4 2>&1 >> 
> $GEMSTONE_LOGDIR/${1}_server-${2}.log &
>
>
>  
>
>     So use something like the following:
>
>     #!/bin/bash
>
>     if [ -z \$1 ];
>     then
>        echo "argument expected"
>     fi
>
>     topaz -l <<EOF
>     set gems $STONENAME user Username pass TopSecret
>     login
>     printIt
>     '$1' printString
>     %
>     exit
>     EOF
>
>
> OK, that worked and gets what I want. But....I am unable to apply the 
> same "Here Document" approach to my real needs:
>
> cat ../scripts/login.st <http://login.st/> \$1 | su -m $GEMSTONE_USER 
> -c \"$GEMSTONE/bin/topaz -ql -T200000 \" 
>
> Notice that $1 is the topaz script I send as an argument (yes, it can 
> have a EOF at the end). Also, I am executing topaz with a "su -m -c 
> ..." so that changes the things I guess.
>
> Do you know how can I adapt the above line to use the Here Document 
> features? I would like to access the arguments inside the topaz script 
> sent as argument ($1 in this case). 
>  
>
>
>     You used "run" inside your script which is a normal "do-it". I
>     replaced it by "printIt" because I assume that you are interessted
>     in the evaluated expression.
>
>
> yes, thanks :)
>  
>
>     Topaz has a directive called input. Use that to load other code or
>     if you don't like the login credentials hardcoded in the script:
>     input $MYAPP_CONFIG/mylogin.topaz
>
>
> mmm good idea. 
>
> So...to conclude:
>
> /opt/gemstone/product/bin/topaz -ql -T200000 <<EOF
> login
> printIt
> '$1' printString
> %
> exit
> EOF
>
> that works. But if I do exactly the same but in the file passed as 
> argument, it does not work anymore:
>
> /opt/gemstone/product/bin/topaz -ql -T200000 <<EOF
> input $1
> EOF
>

Mariano,

that should be correct and it works for me. I tested with the following 
two scripts:

test.sh with the following lines:

#!/bin/bash
topaz -ql <<EOF
input $1
EOF


and input.topaz like this:

set gems seaside user DataCurator pass swordfish
login
printIt
20 factorial
%

I can execute "bash test.sh input.topaz" and get the result.


Just as addition and independent of the here documents approach: Another 
way to access the shell script arguments would be to export them to the 
environment and access them via System>>gemEnvironmentVariable:. So the 
following should also work:

#!/bin/bash
export MYARG=$1
topaz -l <<EOF
set gems seaside user DataCurator pass swordfish
login
printIt
'The first argument was: ', (System gemEnvironmentVariable: 'MYARG')
%
exit
EOF

The here document is just to make the example complete. This way you can 
access the env vars from within any method.

Br,
Ralph

>
> Any ideas?
>
> Thank!
>
>
>
>
>
>     Hope that helps.
>
>     Br,
>     Ralph
>      
>
>
>     Am 13.01.2014 15:31, schrieb Mariano Martinez Peck:
>>     Hi guys,
>>
>>     In Norbert's utilize, we have this nice script runTopazScript.sh :
>>
>>     #!/bin/sh
>>
>>     source $APPLICATION_DIR/env
>>
>>     if [ -z \$1 ];
>>     then
>>        echo "no script name given"
>>     fi
>>
>>     cat ../scripts/login.st <http://login.st> \$1 | su -m
>>     $GEMSTONE_USER -c \"$GEMSTONE/bin/topaz -ql -T200000 \" 
>>
>>
>>     That let us automatically connect to GemStone using an
>>     auto-generated .topazini. So we can pass around a topaz script
>>     and that would be execute. So we can do for example:
>>
>>     sudo sh ./runTopazScript.sh something.tpz 
>>
>>     Now....I saw in several topaz scripts from seaside that the
>>     SMALLTALK code is able to directly access the argument variables
>>     to the shell. For example, startSeaside30_adaptor does:
>>
>>     GsFile gciLogServer: '$1 Server started on port ', $2 printString.
>>
>>     I want to do the same in my something.tpz. Imagine I have this
>>     something.tpz file:
>>
>>     run 
>>     $1 printString.
>>     %
>>
>>     And I execute:
>>
>>     sudo sh ./runTopazScript.sh something.tpz mariano
>>
>>     So how can we adapt the script so that such a smalltalk script
>>     outputs 'mariano' instead of the literal string $1 ?
>>
>>     I tried adding a  & at the end of the topaz call and many other
>>     workarounds but I am not sure if topaz needs something special
>>     for this. 
>>
>>
>>     Thanks a lot in advance and sorry for the offtopic. 
>>
>>     -- 
>>     Mariano
>>     http://marianopeck.wordpress.com
>>
>>
>>     _______________________________________________
>>     Glass mailing list
>>     Glass at lists.gemtalksystems.com <mailto:Glass at lists.gemtalksystems.com>
>>     http://lists.gemtalksystems.com/mailman/listinfo/glass
>>           
>
>
>     _______________________________________________
>     Glass mailing list
>     Glass at lists.gemtalksystems.com <mailto:Glass at lists.gemtalksystems.com>
>     http://lists.gemtalksystems.com/mailman/listinfo/glass
>
>
>
>
> -- 
> Mariano
> http://marianopeck.wordpress.com

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.gemtalksystems.com/mailman/private/glass/attachments/20140114/b334d810/attachment-0001.html>


More information about the Glass mailing list