[WNYLUG-Users] Burnt by Bash AGAIN!!!!

Wolfe, Robert robert.wolfe at robertwolfe.org
Mon Feb 8 14:06:02 EST 2010


I always use to the effect of 'export <VARIABLE>=<VALUE>', if that is of any help.

________________________________________
From: users-bounces at wnylug.org [users-bounces at wnylug.org] On Behalf Of Aaron E. Durkee [aedurkee at yahoo.com]
Sent: Monday, February 08, 2010 1:16 PM
To: Western New York Linux Users Group Users Mailing List
Subject: Re: [WNYLUG-Users] Burnt by Bash AGAIN!!!!

If memory serves me correctly from o'reily's learning the bash shell all you need to do is export the variable

DATE="TODAY"
export DATE

This will allow the new shell to keep value of the variable.

--- On Mon, 2/8/10, Joe Hoot <joehoot at gmail.com> wrote:

> From: Joe Hoot <joehoot at gmail.com>
> Subject: [WNYLUG-Users] Burnt by Bash AGAIN!!!!
> To: "Western New York Linux Users Group Users Mailing List" <users at wnylug.org>
> Date: Monday, February 8, 2010, 11:34 AM
> Hi all,
>
> I don't know if others have had this happen to them.
> However, I have run into this 3-4 times now and have been
> beating my head against the wall (poor wall) attempting to
> debug this.  I hope my memory will hold up next time so
> that I'll remember that bash doesn't handle pipes in the way
> I would want them to.  But I figured I'd toss this out
> to the list in case anyone else runs into these problems
> once in awhile and doesn't want to put dents in their wall:
>
> Here's an example of why I was banging the wall:
>
> #!/bin/bash
> #  - numdiscs.sh - script to check /var/log/messages*
> to see if iSCSI has disconnects and if there
> #
>               have been
> any dm-multipath path failures because of the iSCSI
> disconnects
> #
> MESSAGES=$(ls /var/log/messages*)
> TMPMNTH=AAA
> TMPDAY=0
> FIRSTROUND=0
>
> printf "Date\tDisconnects\tPath Failures\n"
> printf "=====================================\n"
>
> for MESSAGEFILE in $MESSAGES
> do
>   cat $MESSAGEFILE | grep -e "remaining active paths:"
> -e "timeout of 10 sec" | while read MSGMONTH MSGDAY
> rest_of_line
>   do
>      if [ "$MSGMONTH $MSGDAY" !=
> "$TMPMNTH $TMPDAY" ]; then
>         if [ $FIRSTROUND -ne 0 ]; then
>           printf "$TMPMNTH
> $TMPDAY    \t$NUMDISC\t\t$NUMPATH \n"
>         fi
>         FIRSTROUND=1
>         TMPMNTH=$MSGMONTH
>         TMPDAY=$MSGDAY
>         NUMDISC=0
>         NUMPATH=0
>      fi
>
>      echo $rest_of_line | grep "timeout
> of 10 sec" 2>&1 1>/dev/null
>      if [ $? -eq 0 ]; then
>         NUMDISC=`expr $NUMDISC + 1`
>      fi
>      echo $rest_of_line | grep -e
> "remaining active paths: 1" -e "remaining active paths: 0"
> 2>&1 1>/dev/null
>      if [ $? -eq 0 ]; then
>         NUMPATH=`expr $NUMPATH + 1`
>      fi
>   done
>   printf "$TMPMNTH $TMPDAY
> \t$NUMDISC\t\t$NUMPATH \n"
> done
>
> ##### END
>
> In Bash, the following line spawns a subshell for grep +
> another subshell for while.  Well, when you spawn a
> shell, you'll lose your variables for the parent shell.
> In Ksh, this is handled the way I want it to by doing it
> within the parent shell without spawning subshells (I
> believe).  So this works the way I would want it to and
> allow me to use my variables further along in the program.
>
>   cat $MESSAGEFILE | grep -e "remaining active paths:"
> -e "timeout of 10 sec" | while read MSGMONTH MSGDAY
> rest_of_line
>
> The easy fix for me was to change the first line to be
> #!/bin/ksh and all works as expected.
>
>
> Cya,
> Joe
>
> =====================
> Joseph R. Hoot
> Network Penguin
> joe at networkpenguin.com
> GPG KEY:   7145F633
> =====================
>
>
> _______________________________________________
> Users mailing list
> Users at wnylug.org
> http://wnylug.org/mailman/listinfo/users_wnylug.org
>

_______________________________________________
Users mailing list
Users at wnylug.org
http://wnylug.org/mailman/listinfo/users_wnylug.org


More information about the Users mailing list