[lug] My script work on real "ksh" but not "bash"

Jeffrey Haemer jeffrey.haemer at gmail.com
Thu Sep 4 17:16:25 MDT 2008


Dave,

I'm attaching a slightly modified version of your script that does what you
want.  [ Well, at least what I *think* you want. :-) ]

Here's the steps:

(1) Wrap the whole pipe in a function.
(2) At the end of the function, print the variable values, formatted up as
assignments.
(3) Invoke the function and eval those assignments.

Finally, here's a
post<http://seejeffrun.blogspot.com/2008/03/exporting-shell-variables-upwards.html>that
mentions a couple of other approaches you might be able to adapt, too.

Hope this helps.

On Thu, Sep 4, 2008 at 3:54 PM, Jeffrey Haemer <jeffrey.haemer at gmail.com>wrote:

> Dave,
>
> It's not the loop that's biting you, it's the pipe.
>
> $ x=2.718; x=3.14; echo $x
> 3.14
> $ x=6.02e23; x=6 | x = 9; echo $x
> 6.02e23
>
> Bash runs each piece of a pipeline in its own subshell.
>
> Hope this helps.
>
>
> On Thu, Sep 4, 2008 at 1:45 PM, Dave Pitts <dpitts at cozx.com> wrote:
>
>> Hello:
>>
>> I've got a script (below) that works as expected under the Korn Shell
>> (ksh) but fails under Bash. It acts as if the variables have some kind of
>> scope issues as they are null after exiting the loop.
>>
>> It's probably something simple; but I can't see the problem...
>>
>> The script:
>>
>> #!/bin/bash
>> typeset srclist=""
>> typeset tarlist=""
>>
>> if [ "$1" = "" ];then
>>  echo "Usage: $0 statusfile"
>>  exit 1
>> fi
>> cat $1 | while read line
>> do
>>   if [ "${line}xx" = "xx" ]; then
>>     break
>>   fi
>>   tag=`echo $line | awk '{print $2}'`
>>   if [ "${tag}xx" = "Volume:xx" ]; then
>>       while [ "$line" != "Component Volumes:" ]
>>       do
>>          read line
>>       done
>>       endline=""
>>       while [[ -z "${endline}" ]]
>>       do
>>           read line
>>           if [[ "$?" -ne 0 ]]; then
>>               echo "ReadStatusFailed:"
>>               exit 1
>>           fi
>>           case "${line}" in
>>               *\ SOURCE\ *|*\ SOURCE)
>>                   srcvol=`echo $line | awk '{print $1}'`
>>                   ;;
>>               *\ UPTODATE\ *|*\ UPTODATE)
>>                   tarvol=`echo $line | awk '{print $1}'`
>>                   endline="TARGET"
>>                  ;;
>>               *\ SCRATCH\ *|*\ SCRATCH)
>>                   endline="TARGET"
>>                  ;;
>>
>>           esac
>>       done
>>       srclist="$srclist $srcvol"
>>       tarlist="$tarlist $tarvol"
>>   fi
>>   echo "inloop: srclist = " $srclist ", tarlist = " $tarlist
>>   echo "    srcvol = " $srcvol ", tarvol = " $tarvol
>> done
>> echo "outloop: srclist = " $srclist ", tarlist = " $tarlist
>> if [[ -z "${srclist}" ]]; then
>>  echo "IT's BROKE"
>> else
>>  echo "It worked"
>> fi
>> exit
>>
>> The data:
>>
>> Group Volume:     Vol1
>> Component Volumes:
>>  /dev/dasdc1                SOURCE
>>  /dev/dasdc2                UPTODATE
>>
>>
>> So, if anybody sees an issue here. Please let me know...
>> Thanks.
>>
>> PS. re: System Load - I FINALLY got it all to work after they replaced the
>> disk drive and found some wrongly placed jumpers on the motherboard.
>>
>> --
>> Dave Pitts             PULLMAN: Travel and sleep in safety and comfort.
>> dpitts at cozx.com        My other RV IS a Pullman (Colorado Pine).
>> http://www.cozx.com
>>
>> _______________________________________________
>> Web Page:  http://lug.boulder.co.us
>> Mailing List: http://lists.lug.boulder.co.us/mailman/listinfo/lug
>> Join us on IRC: lug.boulder.co.us port=6667 channel=#colug
>>
>
>
>
> --
> Jeffrey Haemer <jeffrey.haemer at gmail.com>
> 720-837-8908 [cell]
> http://goyishekop.blogspot.com
>



-- 
Jeffrey Haemer <jeffrey.haemer at gmail.com>
720-837-8908 [cell]
http://goyishekop.blogspot.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.lug.boulder.co.us/pipermail/lug/attachments/20080904/13314103/attachment.html>
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: foo.txt
URL: <http://lists.lug.boulder.co.us/pipermail/lug/attachments/20080904/13314103/attachment.txt>


More information about the LUG mailing list