[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