[ncl-talk] Passing a variable value from NCL to bash Script
Abheera Hazra
hazra.abheera at gmail.com
Wed Mar 1 21:59:53 MST 2017
Thank you very much Dave, this was extremely helpful.
Best,
Abheera
On Wed, Mar 1, 2017 at 2:56 PM, Dave Allured - NOAA Affiliate <
dave.allured at noaa.gov> wrote:
> Here is a method using only standard out, and no temp file. The leading
> colons (:) are needed in this case, to ensure unique match strings.
>
> program.ncl:
>
> ;;Perform certain computations ...
> print (":w1_out=" + w1)
> print (":dw1_out=" + dw1)
> exit
>
> loop.sh:
>
> ncl_out="`ncl k1=${w1} dw11=${dw1} opti.error.ncl`"
> w1=`echo "$ncl_out" | grep :w1_out= | cut -f2 -d=`
> dw1=`echo "$ncl_out" | grep :dw1_out= | cut -f2 -d=`
>
> echo $w1
> echo $dw1
>
> --Dave
>
>
> On Wed, Mar 1, 2017 at 8:38 AM, Alan Brammer <abrammer at albany.edu> wrote:
>
>> Think Rick + Dennis answered the reversed question. To pass a value out
>> of NCL you probably need to write it to a file or some form.
>>
>> When you call system or systemfunc NCL launches a sub shell, so
>> environment variables will disappear as soon as the call is finished.
>>
>> To stick with the bash loop, writing the variables to a text file would
>> be the simplest solution. Then set the bash variables to the contents of
>> the text file(s).
>>
>> asciiwrite("w1", w1 )
>> asciiwrite("dw1", dw1)
>> ....
>> ....
>> w1=$(cat w1)
>> dw1=$(cat dw1)
>>
>> Currently though, you're appending the ncl script to opti.error.ncl on
>> each loop. Which doesn't seem right. Also it seems cleaner, given the
>> pseudocode, to just do the loop within NCL and define the main script as a
>> function with the w1, dw1 arguments.
>>
>>
>> On Wed, Mar 1, 2017 at 8:59 AM, Rick Brownrigg <brownrig at ucar.edu> wrote:
>>
>>> Hi,
>>>
>>> If I understand correctly, you can pass in the values on the
>>> command-line invocation of NCL as:
>>>
>>> ncl w1=X dw1=Y
>>>
>>> where X and Y are the actual values. To pass in string arguments, we
>>> tell people to place quotes around the whole var=value pair, like:
>>>
>>> ncl 'myStringVar="foo"'
>>>
>>> You can find more info about passing in arguments at:
>>>
>>> http://ncl.ucar.edu/Document/Manuals/Ref_Manual/NclCLO.shtml
>>>
>>> Hope that helps...
>>> Rick
>>>
>>> On Wed, Mar 1, 2017 at 12:20 AM, Abheera Hazra <hazra.abheera at gmail.com>
>>> wrote:
>>>
>>>> Hi,
>>>>
>>>> I am using NCL to calculate a few terms for an optimization algorithm
>>>> and I am calling the NCL function from within a 'while loop' in a bash
>>>> script. The 'while loop' runs till a certain condition is met and for the
>>>> condition to be met, the bash script needs to accept a new value for an
>>>> existing variable from the NCL script. I have tried using system,
>>>> systemfunc with even the export command but nothing seems to work. The code
>>>> looks as follows:
>>>>
>>>> ------------------------------------------
>>>> #!/bin/bash
>>>>
>>>> w1=0.4
>>>> dw1=0.1
>>>> inc=0.001
>>>>
>>>> while awk 'BEGIN { if ('$dw1'<'$inc') {exit 1}}'; do
>>>>
>>>> cat <<'EOF' >> opti.error.ncl
>>>>
>>>> ;;;;Perform certain computations on w1 and update the w1 and dw1
>>>> w1=nw1
>>>> dw1=ndw1
>>>>
>>>> system("w1=" + w1)
>>>> system("dw1=" + dw1)
>>>>
>>>> ;;;;w1 and dw1 need to be passed to the bash script
>>>>
>>>> EOF
>>>>
>>>>
>>>> ncl k1=${w1} dw11=${dw1} opti.error.ncl
>>>>
>>>> echo $w1
>>>> echo $dw1
>>>>
>>>> done
>>>> ------------------------------------------
>>>>
>>>> But this does not update w1 and dw1 values. Any input would be greatly
>>>> appreciated.
>>>>
>>>> Thanks,
>>>> Abheera
>>>>
>>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20170301/abb45882/attachment.html
More information about the ncl-talk
mailing list