[ncl-talk] Bash variables not being read via system() function

Tabish Ansari tabishumaransari at gmail.com
Sat Oct 8 07:59:26 MDT 2022


Thanks a lot Dave, that works!

I was not aware that one can also send arguments from within NCL to the
shell, that's why I was writing them out to ASCII files and then reading
them again in the shell. But this is more efficient.
Still, don't know why it wasn't working that way.

Thanks again.

best wishes,

Tabish
-------------------------------
Dr Tabish Ansari
Research Associate
Air Quality Modelling Group
IASS-Potsdam
Germany


On Sat, 8 Oct 2022 at 15:31, Dave Allured - NOAA Affiliate <
dave.allured at noaa.gov> wrote:

> Tabish, I do not know what is wrong with the system() command the way you
> wrote it.  However, I suggest a simpler approach.  It is easy to directly
> pass simple string command line arguments to a shell command through
> system().  Do not use asciiwrite or text files.
>
>     cd_string = tostring (cd)
>     emis_string = str_join (tostring (emis), " ")
>     system ("./myscript.sh " + cd_string + " " + emis_string)
>
> Take care to include intervening spaces between all arguments to the shell
> command, as shown here.  You could also write "cd" directly, because NCL
> automatically converts scalar numbers to strings when doing string
> concatenation:
>
>     emis_string = str_join (tostring (emis), " ")
>     system ("./myscript.sh " + cd + " " + emis_string)
>
>
> On Sat, Oct 8, 2022 at 6:34 AM Tabish Ansari via ncl-talk <
> ncl-talk at mailman.ucar.edu> wrote:
>
>> Hello,
>>
>> I have a small shell script *myscript.sh* which takes 13 arguments:
>> start day, and 12 values of emission levels. For now, it just echoes them
>> back on the screen.
>>
>> I'm supplying these 13 numbers via an NCL script by writing them out to a
>> text file and reading them again in the shell. NCL is nicely writing these
>> text files out and myscript.sh is able to pick these arguments when I write
>> the command in bash. However, when I try to achieve the same from inside
>> NCL using the system() function, the shell script isn't able to read these
>> arguments.
>>
>> Here's *myscript.sh:*
>> #!/bin/bash
>> echo day=$1
>> echo Ai=$2
>> echo Ap=$3
>> echo At=$4
>> echo Ar=$5
>> echo Bi=$6
>> echo Bp=$7
>> echo Bt=$8
>> echo Br=$9
>> echo Ci=${10}
>> echo Cp=${11}
>> echo Ct=${12}
>> echo Cr=${13}
>>
>> And here's my NCL script:
>> begin
>>
>> SD = 02 ; start day
>> baseline = (/100,100,100,100,100,100,100,100,100,100,100,100/)
>>
>> emis = baseline
>> print("PREPARING EMISSIONS: "+emis(0)+" "+emis(1)+" "+emis(2)+"
>> "+emis(3)+" "+emis(4)+" "+emis(5)+" "+emis(6)+" "+emis(7)+" "+emis(8)+"
>> "+emis(9)+" "+emis(10)+" "+emis(11))
>>
>> asciiwrite("emisstring.txt",emis)
>> asciiwrite("SD.txt",SD)
>>
>> system("./myscript.sh $(<SD.txt) $(<emisstring.txt)")
>>
>> end
>>
>> These two scripts are self-sufficient and you can easily copy-paste and
>> test them on your system. Please let me know what's wrong here.
>>
>> Thanks a lot.
>>
>> Tabish
>> -------------------------------
>> Dr Tabish Ansari
>> Research Associate
>> Air Quality Modelling Group
>> IASS-Potsdam
>> Germany
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.ucar.edu/pipermail/ncl-talk/attachments/20221008/7ac29a9b/attachment.htm>


More information about the ncl-talk mailing list