Am 17.04.2012 um 16:58 schrieb Sara Rolfe:

> Thanks, I did try single quotes too, but get the same problem.  Maybe it 
> would help if you could look at the test script I'm submitting?  I'd really 
> like to know if there's something I'm doing which makes escaping the 
> variables necessary.  I've copied it below.
> 
> #!/bin/bash
> #$ -cwd
> #$ -S /bin/bash
> #
> start=1
> end=3
> step=1
> email="[email protected]"
> jobname="SmoothingFilter_test"
> #
> cat <<EOF | qsub

No cat necessary:

qsub <<EOF

> #!/bin/bash
> #\$ -S /bin/bash
> #\$ -M $email
> #\$ -m be
> #\$ -N $jobname
> #\$ -t $start-$end:$step
> #\$ -e /myPath
> #\$ -o /myPath

No \ necessary, as $ followed by a blank won't be expanded.

Why not specifying all as arguments to the `qsub` command itself?

> #
> uname -a
> #
> infile=$(awk -v 'line=$SGE_TASK_ID' 'NR == line' /myPath/my_outfile_list.txt)

infile=\$(awk -v line=\$SGE_TASK_ID 'NR == line' /myPath/my_outfile_list.txt)

It should be expanded at execution time, not while the script is created. So 
the $ needs to be escaped in both locations, and later on no ', as it would 
prohibit the expansion.

The below mentioned:

>>>> awk "NR==\$SGE_TASK_ID" /myPath/fileList.txt

should work too

-- Reuti


> #
> echo "The input file is: $infile"
> echo "The escaped input file is: \$infile"
> echo "The task ID is: $SGE_TASK_ID"
> echo "The escaped task ID is: \$SGE_TASK_ID"
> #
> EOF
> #
> exit 0
> 
> The output file for the third iteration is:
> 
> The input file is:
> The escaped input file is:
> The task ID is: undefined
> The escaped task ID is: 3
> 
> On Apr 17, 2012, at 2:37 AM, Reuti wrote:
> 
>> Am 17.04.2012 um 11:08 schrieb George Georgalis:
>> 
>>> On Mon, Apr 16, 2012 at 10:37 PM, Sara Rolfe <[email protected]> 
>>> wrote:
>>>> I am new to both scripting and SGE, so I don't understand why, but I need 
>>>> to
>>>> escape all the variables in my script.  For example,
>>>> 
>>>> awk "NR==$SGE_TASK_ID" /myPath/fileList.txt
>>>> 
>>>> produces a blank output, but if I escape the env variable, like:
>>>> 
>>>> awk "NR==\$SGE_TASK_ID" /myPath/fileList.txt
>>>> 
>>>> then I get the correct line from the text file.  The problem is when I try
>>>> to assign this output to a variable.  I still need to use the escape, but I
>>>> think it's not being passed correctly.
>>> 
>>> 
>>> I usually use single quotes for awk. It prevents shell expansion of
>>> the symbols. (Shell expansion applies to double quoted arguments but
>>> not single quoted ones.)
>> 
>> I second this. Using -v to pass arguments to awk (they are known in the 
>> BEGIN block already) or list them after the script (they are only available 
>> outside of the BEGIN block) and using single quotation marks for the script 
>> is the careful way to avoid the mentioned side effects.
>> 
>> But I would accept an exception here if the only rule is a test for the NR 
>> field as it's still clear what is done.
>> 
>> --
>> 
>> Do you submit an array job? Otherwise $SGE_TASK_ID won't be set to 1 but 
>> "undefined". Then:
>> 
>> ${SGE_TASK_ID/undefinded/1}
>> 
>> might help and give you a 1 for non-array jobs, hence:
>> 
>> #!/bin/sh
>> echo $(awk "NR==${SGE_TASK_ID/undefined/1}" file)
>> 
>> is working fine for me.
>> 
>> -- Reuti
>> 
>> 
>>> .George
>>> 
>>> 
>>> -- 
>>> George Georgalis, (415) 894-2710, http://www.galis.org/
>>> 
>>> _______________________________________________
>>> users mailing list
>>> [email protected]
>>> https://gridengine.org/mailman/listinfo/users
>>> 
>> 
> 


_______________________________________________
users mailing list
[email protected]
https://gridengine.org/mailman/listinfo/users

Reply via email to