[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Sourcing a script renders getopts impotent (or is it just me?)

From: Mun
Subject: Re: Sourcing a script renders getopts impotent (or is it just me?)
Date: Fri, 17 Sep 2010 09:49:28 -0700
User-agent: Mutt/1.5.20 (2009-06-14)

Hi Dennis,

On Thu, Sep 16, 2010 at 05:18 PM PDT, Dennis Williamson wrote:
DW> Use return instead of exit when you have an error and you're sourcing
DW> the script. You can make it conditional.
DW> Try setting OPTIND=1 to make your script work when it's sourced.
DW> Initialize your script's variables since they will be carried over
DW> between runs when you source the script.

That was in fact the problem.  Once I set OPTIND in the script, it
worked correctly :)

DW> #!/bin/bash
DW> invoked=$_   # needs to be first thing in the script

Setting 'invoked' is a great idea.

Thanks for the quick and very helpful reply!



DW> OPTIND=1    # also remember to initialize your flags and other variables
DW> . . .    # do some stuff
DW> if some error condition
DW> then
DW>     if [[ $invoked != $0 ]]
DW>     then
DW>         return 1    # the script was sourced
DW>     else
DW>         exit 1    # the script was executed
DW>     fi
DW> fi
DW> On Thu, Sep 16, 2010 at 4:06 PM, Mun <address@hidden> wrote:
DW> > Hi,
DW> >
DW> > Platform : Red Hat Enterprise Linux v5.5
DW> > Bash     : GNU bash, version 4.1.0(1)-release (x86_64-unknown-linux-gnu)
DW> >
DW> > I have a script which uses getopts that I need to source in my
DW> > interactive shell.  The problem is that if I source it, getops behaves
DW> > as if no arguments were passed into the script.  Although, if I simply
DW> > run the script in a sub-process, getopts works correctly.
DW> >
DW> > As an experiment, I echo'd all args prior to the getopts statement in
DW> > the script, and when the script was sourced all args were correctly
DW> > displayed.  So I'm at a loss as to why getopts doesn't seem to work when
DW> > the script is sourced.
DW> >
DW> > On a side note, there is some error checking being done within the
DW> > script.  I would like the script execution to terminate but leave the
DW> > interactive shell running upon error detection (i.e., don't exit out of
DW> > the terminal sessioni).  Is there any way to accomplish that objective
DW> > in bash?
DW> >
DW> > Regards,
DW> >
DW> > --
DW> > Mun
DW> >
DW> >

reply via email to

[Prev in Thread] Current Thread [Next in Thread]