Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: Making a script 'sourceable'



    Hi Bart :)

 * Bart Schaefer <schaefer@xxxxxxxxxxxxxxxx> dixit:
> > > >     The second thing is derived from the above question: since
> > > > checking for 'sourcery' ;) is very difficult even non portably, I've
> > > > thought about making my zsh scripts sourceables.
> > > Lloyd Z. has the way of it.
> >     Well, an extra fork... I don't really like that method, but...
> There's also this, wherein a function name unlikely to exist in the 
> calling shell is invented and then that function destroys itself as soon 
> as it is invoked:
> 
> --- 8< ---
> #! bin/zsh
> function __the_real_script_$$ {
>   unfunction __the_real_script_$$
>   emulate -LR zsh
>   # body of script goes here, using "local" to control variables
> }
> __the_real_script_$$ "$@"
> --- >8 ---
> 
> However, that pretty thoroughly demolishes the usefulness of $0, and any 
> error messages that are printed will fail to show the name of the script 
> and the line numbers will be "wrong".

    So the method pointed by Lloyd is more suitable...
 
> On the other hand this (and the subshell wrapper variant, too) has the 
> advantage that the entire script is parsed for syntax before any of it is 
> executed, so if you make a mistake somewhere you don't have half-finished
> script processing to clean up.

    Yes, I noticed that this morning, doing tests :)) For me that
pays for the extra fork.
 
> Back on the first hand again, though, you pay the memory cost of that 
> parse on every call to the script.

    Usually the scripts are quite short: in fact, that's the reason
that made me think about auditing the scripts to avoid side-effects
when the script is sourced instead of run in a subshell.

    Thanks a lot for your help. I probably end up doing the '()'
thing, because the extra fork really is not very expensive, the only
problem is 'ps' output cluttering ;)

    Raúl Núñez de Arenas Coronado

-- 
Linux Registered User 88736
http://www.pleyades.net & http://raul.pleyades.net/



Messages sorted by: Reverse Date, Date, Thread, Author