zsh-users
 help / color / mirror / code / Atom feed
From: Bart Schaefer <schaefer@brasslantern.com>
To: Zsh Users <zsh-users@sunsite.dk>
Subject: Re: Factoring out code
Date: Mon, 05 Sep 2005 20:08:19 +0000	[thread overview]
Message-ID: <1050905200819.ZM8987@candle.brasslantern.com> (raw)
In-Reply-To: <20050905114253.GA7132@DervishD>

On Sep 5,  1:42pm, DervishD wrote:
}
}     How can I make "common.sh" to run code BEFORE and AFTER some
} point in the script which sources it

Have you considered splitting common.sh into two files, the first called
(for example) emulate.sh and the second common.sh, and then start the
rest of your scripts with (again for example)

    . emulate.sh
    function help { ... }
    function doc { ... }
    . common.sh

??  This sort of thing is done quite frequently in languages like PHP
that are used for writing web applications.  You should probably also
put all of these "include files" in a common subdirectory, so that you
typically write

    . inc/emulate.sh
    function help { ... }
    function doc { ... }
    . inc/common.sh

Another approach would be to have common.sh define a bunch of variables
whose contents are snippets of shell code; e.g.

    . common.sh
    function help { ... }
    function doc { ... }
    eval ${_common_parse_argv:?'common.sh not sourced'}

(See the manual for ${name:?message} semantics.)

} if that code must modify global
} variables in the caller and work like a cut'n'paste (I mean, for the
} 'sourcer' script the code should run like if was cut from "common.sh"
} and pasted into the file, just like a macro)?

You have to be careful with this unless you're doing something like

    eval "$(<inc/common.sh)"

because the argv array CAN become local to a sourced file.  If you pass
multiple arguments to the dot or source commands, as in

    . foo.sh bar baz

then argv becomes a local with value (bar baz) in foo.sh, just as it
would in a function, and e.g. `set -- ...' no longer affects the argv
of the caller.

By the way, 'typeset -gx argv' has no effect whatsoever.  You cannot
cause argv to change from local to global under any circumstances.


  reply	other threads:[~2005-09-05 20:08 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-09-05 11:42 DervishD
2005-09-05 20:08 ` Bart Schaefer [this message]
2005-09-06 10:37   ` DervishD
2005-09-06 14:58     ` Bart Schaefer
2005-09-06 15:27       ` DervishD

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1050905200819.ZM8987@candle.brasslantern.com \
    --to=schaefer@brasslantern.com \
    --cc=zsh-users@sunsite.dk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).