* Re: PATCH: funcstack[-1] (formerly Suppress tracing of "set +x") [not found] ` <20160205160236.1274aa5b@pwslap01u.europe.root.pri> @ 2016-02-05 22:27 ` Peter Stephenson 2016-02-07 0:22 ` Daniel Shahaf 2016-02-14 21:52 ` Assigning to $0 (formerly: PATCH: funcstack[-1]) Bart Schaefer 0 siblings, 2 replies; 7+ messages in thread From: Peter Stephenson @ 2016-02-05 22:27 UTC (permalink / raw) To: Zsh hackers list On Fri, 5 Feb 2016 10:44:44 +0000 Peter Stephenson <p.stephenson@samsung.com> wrote: > Drifting a bit away from the original topic... I tried to improve this > so you didn't get the "(anon)" in the PS4 output, instead something more > useful. I came up with this... > > () { > setopt localoptions promptsubst > PS4=${PS4//\%N/'${funcstack[2]:-$0}'} > setopt xtrace > # some command > } > > This sort of works, but it struck me that it's harder than it might be > to get the name of the top level script. (Finally moved this to zsh-workers.) Here's a much simpler way. It strikes me that actually I could have set POSIX_ARGZERO, but maybe this is useful. By the way, looking at the code I just notice that the following isn't an error even though it doesn't do what you presumably expect: % setopt posixargzero % print $0 zsh % 0=foo % print $0 zsh Maybe that's OK so far, but you don't even get the value back when you unset the option; it's silently lost. It seems a bit pointless since you'd get the same value of $0 with POSIX_ARGZERO set even if it stored the value in the normal argzero space the way it seems to imply it did. pws diff --git a/Doc/Zsh/params.yo b/Doc/Zsh/params.yo index 6722092..159a5bb 100644 --- a/Doc/Zsh/params.yo +++ b/Doc/Zsh/params.yo @@ -951,6 +951,13 @@ track of versions of the shell during development between releases; hence most users should not use it and should instead rely on tt($ZSH_VERSION). ) +vindex(ZSH_SCRIPT) +item(tt(ZSH_SCRIPT))( +If zsh was inovked to run a script, this is the name of the script. +Otherwise, the name used to invoke the current shell. This is +the same as the value of tt($0) when the tt(POSIX_ARGZERO) option is +set, but is always available. +) item(tt(zsh_scheduled_events))( See ifzman(the section `The zsh/sched Module' in zmanref(zshmodules))\ ifnzman(noderef(The zsh/sched Module)). diff --git a/Src/params.c b/Src/params.c index 76ed61c..0233e2b 100644 --- a/Src/params.c +++ b/Src/params.c @@ -813,6 +813,7 @@ createparamtable(void) setsparam("TTY", ztrdup_metafy(ttystrname)); setsparam("VENDOR", ztrdup_metafy(VENDOR)); setsparam("ZSH_NAME", ztrdup_metafy(zsh_name)); + setsparam("ZSH_SCRIPT", ztrdup(posixzero)); setsparam("ZSH_VERSION", ztrdup_metafy(ZSH_VERSION)); setsparam("ZSH_PATCHLEVEL", ztrdup_metafy(ZSH_PATCHLEVEL)); setaparam("signals", sigptr = zalloc((SIGCOUNT+4) * sizeof(char *))); ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: PATCH: funcstack[-1] (formerly Suppress tracing of "set +x") 2016-02-05 22:27 ` PATCH: funcstack[-1] (formerly Suppress tracing of "set +x") Peter Stephenson @ 2016-02-07 0:22 ` Daniel Shahaf 2016-02-14 21:52 ` Assigning to $0 (formerly: PATCH: funcstack[-1]) Bart Schaefer 1 sibling, 0 replies; 7+ messages in thread From: Daniel Shahaf @ 2016-02-07 0:22 UTC (permalink / raw) To: Peter Stephenson; +Cc: Zsh hackers list Peter Stephenson wrote on Fri, Feb 05, 2016 at 22:27:50 +0000: > +If zsh was inovked to run a script, this is the name of the script. Typo: s/inovked/invoked/ ^ permalink raw reply [flat|nested] 7+ messages in thread
* Assigning to $0 (formerly: PATCH: funcstack[-1]) 2016-02-05 22:27 ` PATCH: funcstack[-1] (formerly Suppress tracing of "set +x") Peter Stephenson 2016-02-07 0:22 ` Daniel Shahaf @ 2016-02-14 21:52 ` Bart Schaefer 2016-02-15 6:51 ` Mikael Magnusson 2016-02-15 9:17 ` Peter Stephenson 1 sibling, 2 replies; 7+ messages in thread From: Bart Schaefer @ 2016-02-14 21:52 UTC (permalink / raw) To: Zsh hackers list On Feb 5, 10:27pm, Peter Stephenson wrote: } } By the way, looking at the code I just notice that the following isn't } an error even though it doesn't do what you presumably expect: } } % setopt posixargzero } % print $0 } zsh } % 0=foo } % print $0 } zsh } } Maybe that's OK so far, but you don't even get the value back when you } unset the option; it's silently lost. So what behavior would be preferable? 1. POSIXARGZERO makes $0 report an error on assignment (read only?) 2. the value is stored and reappears when POSIXZERO is unset? 3. as (2) but a warning is printed? As another by-the-way: torch% print $0; () { typeset -g 0=argzero; print $0 }; print $0 Src/zsh argzero Src/zsh So typeset will accept 0 as a valid name and -g as a valid option, but can't actually set the global $0. ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Assigning to $0 (formerly: PATCH: funcstack[-1]) 2016-02-14 21:52 ` Assigning to $0 (formerly: PATCH: funcstack[-1]) Bart Schaefer @ 2016-02-15 6:51 ` Mikael Magnusson 2016-02-15 9:17 ` Peter Stephenson 1 sibling, 0 replies; 7+ messages in thread From: Mikael Magnusson @ 2016-02-15 6:51 UTC (permalink / raw) To: Bart Schaefer; +Cc: Zsh hackers list On Sun, Feb 14, 2016 at 10:52 PM, Bart Schaefer <schaefer@brasslantern.com> wrote: > On Feb 5, 10:27pm, Peter Stephenson wrote: > } > } By the way, looking at the code I just notice that the following isn't > } an error even though it doesn't do what you presumably expect: > } > } % setopt posixargzero > } % print $0 > } zsh > } % 0=foo > } % print $0 > } zsh > } > } Maybe that's OK so far, but you don't even get the value back when you > } unset the option; it's silently lost. > > So what behavior would be preferable? > > 1. POSIXARGZERO makes $0 report an error on assignment (read only?) > > 2. the value is stored and reappears when POSIXZERO is unset? > > 3. as (2) but a warning is printed? > > As another by-the-way: > > torch% print $0; () { typeset -g 0=argzero; print $0 }; print $0 > Src/zsh > argzero > Src/zsh > > So typeset will accept 0 as a valid name and -g as a valid option, but > can't actually set the global $0. http://www.zsh.org/mla/workers/2015/msg01400.html Some time before that patch, assigning to $0 was always possible, but at some point it stopped working. -- Mikael Magnusson ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Assigning to $0 (formerly: PATCH: funcstack[-1]) 2016-02-14 21:52 ` Assigning to $0 (formerly: PATCH: funcstack[-1]) Bart Schaefer 2016-02-15 6:51 ` Mikael Magnusson @ 2016-02-15 9:17 ` Peter Stephenson 2016-02-15 17:08 ` Bart Schaefer 1 sibling, 1 reply; 7+ messages in thread From: Peter Stephenson @ 2016-02-15 9:17 UTC (permalink / raw) To: Zsh hackers list On Sun, 14 Feb 2016 13:52:47 -0800 Bart Schaefer <schaefer@brasslantern.com> wrote: > On Feb 5, 10:27pm, Peter Stephenson wrote: > } > } By the way, looking at the code I just notice that the following isn't > } an error even though it doesn't do what you presumably expect: > } > } % setopt posixargzero > } % print $0 > } zsh > } % 0=foo > } % print $0 > } zsh > } > } Maybe that's OK so far, but you don't even get the value back when you > } unset the option; it's silently lost. > > So what behavior would be preferable? > > 1. POSIXARGZERO makes $0 report an error on assignment (read only?) This seems to make the most sense. Setting a value of $0 you're not going to see immediately is pointless. pws ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Assigning to $0 (formerly: PATCH: funcstack[-1]) 2016-02-15 9:17 ` Peter Stephenson @ 2016-02-15 17:08 ` Bart Schaefer 2016-02-15 17:12 ` Mikael Magnusson 0 siblings, 1 reply; 7+ messages in thread From: Bart Schaefer @ 2016-02-15 17:08 UTC (permalink / raw) To: Zsh hackers list On Feb 15, 7:51am, Mikael Magnusson wrote: } } > So typeset will accept 0 as a valid name and -g as a valid option, but } > can't actually set the global $0. } } http://www.zsh.org/mla/workers/2015/msg01400.html Some time before } that patch, assigning to $0 was always possible, but at some point it } stopped working. No, I think it was never possible to assign to the global $0 from inside a function. torch% print $ZSH_VERSION 4.2.0 torch% zero() { typeset -g 0=argzero; print $0 } torch% print $0; zero; print $0 /bin/zsh argzero /bin/zsh torch% This is because the "argzero" C global is handled independently of the usual parameter scope code. On Feb 15, 9:17am, Peter Stephenson wrote: } } > 1. POSIXARGZERO makes $0 report an error on assignment (read only?) } } This seems to make the most sense. Setting a value of $0 you're not } going to see immediately is pointless. diff --git a/Src/params.c b/Src/params.c index 0233e2b..8bd8a8e 100644 --- a/Src/params.c +++ b/Src/params.c @@ -4158,7 +4158,9 @@ static void argzerosetfn(UNUSED(Param pm), char *x) { if (x) { - if (!isset(POSIXARGZERO)) { + if (isset(POSIXARGZERO)) + zerr("read-only variable: 0"); + else { zsfree(argzero); argzero = ztrdup(x); } ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Assigning to $0 (formerly: PATCH: funcstack[-1]) 2016-02-15 17:08 ` Bart Schaefer @ 2016-02-15 17:12 ` Mikael Magnusson 0 siblings, 0 replies; 7+ messages in thread From: Mikael Magnusson @ 2016-02-15 17:12 UTC (permalink / raw) To: Bart Schaefer; +Cc: Zsh hackers list On Mon, Feb 15, 2016 at 6:08 PM, Bart Schaefer <schaefer@brasslantern.com> wrote: > On Feb 15, 7:51am, Mikael Magnusson wrote: > } > } > So typeset will accept 0 as a valid name and -g as a valid option, but > } > can't actually set the global $0. > } > } http://www.zsh.org/mla/workers/2015/msg01400.html Some time before > } that patch, assigning to $0 was always possible, but at some point it > } stopped working. > > No, I think it was never possible to assign to the global $0 from inside > a function. > > torch% print $ZSH_VERSION > 4.2.0 > torch% zero() { typeset -g 0=argzero; print $0 } > torch% print $0; zero; print $0 > /bin/zsh > argzero > /bin/zsh > torch% > > This is because the "argzero" C global is handled independently of the > usual parameter scope code. Ah, right. I must have assumed on some level that we were talking about a function-scoped $0 because I have never in my life wanted to change the top-level $0. -- Mikael Magnusson ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2016-02-15 17:12 UTC | newest] Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- [not found] <20151230104531.GA20496@linux.vnet.ibm.com> [not found] ` <5683F898.7010907@inlv.org> [not found] ` <20160205100902.GA14979@linux.vnet.ibm.com> [not found] ` <20160205102735.1f09973a@pwslap01u.europe.root.pri> [not found] ` <20160205104444.2437ad33@pwslap01u.europe.root.pri> [not found] ` <20160205160236.1274aa5b@pwslap01u.europe.root.pri> 2016-02-05 22:27 ` PATCH: funcstack[-1] (formerly Suppress tracing of "set +x") Peter Stephenson 2016-02-07 0:22 ` Daniel Shahaf 2016-02-14 21:52 ` Assigning to $0 (formerly: PATCH: funcstack[-1]) Bart Schaefer 2016-02-15 6:51 ` Mikael Magnusson 2016-02-15 9:17 ` Peter Stephenson 2016-02-15 17:08 ` Bart Schaefer 2016-02-15 17:12 ` Mikael Magnusson
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).