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

Re: loading user startup files for zsh scripts



>>>>> On February 10, 2011 Bart Schaefer <schaefer@xxxxxxxxxxxxxxxx> wrote:

> This is odd considering that $* has already been set to the script
> arguments by the time .zshenv is processed.  It also means that zsh
> will read all the init files before discovering that it can't read
> the script file.

This appears to be due to support for the (undocumented) PATHSCRIPT
option, whereby the path is searched for the runscript, and therefore
the startup files must be read first so that PATH can be set properly.

> I'm also finding it a little weird that $0 apparently might be a
> metafied string, since setupshin() believes that unmeta(runscript)
> is necessary before calling e.g. access().

Did you note this line near the top of zsh_main():

|    for (t = argv; *t; *t = metafy(*t, -1, META_ALLOC), t++);

i.e. all the argv arguments are metified early on.

> I'm inclined to suggest ZSH_SCRIPT to be initialized from runscript.

How is the patch below?  I can add doc if you like it.. one open
question is whether you want $ZSH_SCRIPT to be unset or empty when not
running a script; currently it would be empty, which might be useful
for detecting whether zsh is providing that parameter.

> I'd also like to get ZSH_INTERPRETER to be the actual path to the shell
> executable, but I suspect that's not universally available from the OS.

Didn't touch this one.

> Returning to your original problem ... I don't suppose all these user's
> hosts are running linux?  You can examine /proc/$$/cmdline to find out
> if a script name appears.

Oooh that's tricky, yes all are a variety of linux distros, mostly
debian/ubuntu and FC/RHEL/Centos.  Still would have to parse it and
deal with the nul byte separators, yuck.

Greg


Index: Src/init.c
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/init.c,v
retrieving revision 1.118
diff -u -r1.118 init.c
--- Src/init.c	11 Feb 2011 04:04:05 -0000	1.118
+++ Src/init.c	11 Feb 2011 16:22:50 -0000
@@ -1485,6 +1485,7 @@
     opts[USEZLE] = 1;   /* may be unset in init_io() */
     /* sets INTERACTIVE, SHINSTDIN and SINGLECOMMAND */
     parseargs(argv, &runscript);
+    zsh_script = runscript;
 
     SHTTY = -1;
     init_io();
Index: Src/params.c
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/params.c,v
retrieving revision 1.169
diff -u -r1.169 params.c
--- Src/params.c	16 Jan 2011 20:35:31 -0000	1.169
+++ Src/params.c	11 Feb 2011 16:22:51 -0000
@@ -80,7 +80,8 @@
      *rprompt2,		/* $RPROMPT2    */
      *sprompt,		/* $SPROMPT     */
      *wordchars,	/* $WORDCHARS   */
-     *zsh_name;		/* $ZSH_NAME    */
+     *zsh_name,		/* $ZSH_NAME    */
+     *zsh_script;	/* $ZSH_SCRIPT  */
 /**/
 mod_export
 char *ifs,		/* $IFS         */
@@ -779,6 +780,7 @@
     setsparam("TTY", ztrdup(ttystrname));
     setsparam("VENDOR", ztrdup(VENDOR));
     setsparam("ZSH_NAME", ztrdup(zsh_name));
+    setsparam("ZSH_SCRIPT", ztrdup(zsh_script));
     setsparam("ZSH_VERSION", ztrdup(ZSH_VERSION));
     setsparam("ZSH_PATCHLEVEL", ztrdup(ZSH_PATCHLEVEL));
     setaparam("signals", sigptr = zalloc((SIGCOUNT+4) * sizeof(char *)));



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