Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: When should interactive option be set/.zshrc read?
- X-seq: zsh-workers 12764
- From: "Bart Schaefer" <schaefer@xxxxxxxxxxxxxxxxxxxxxxx>
- To: "ZSH workers mailing list" <zsh-workers@xxxxxxxxxxxxxx>
- Subject: Re: When should interactive option be set/.zshrc read?
- Date: Wed, 6 Sep 2000 15:25:37 +0000
- In-reply-to: <000601c017ff$bedcbad0$21c9ca95@xxxxxxxxxxxxxx>
- In-reply-to: <200009061249.OAA01000@xxxxxxxxxxxxxxxxxxxxxxxxxxxx>
- In-reply-to: <0G0G00B57UDM35@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
- In-reply-to: <000701c01803$20bcb360$21c9ca95@xxxxxxxxxxxxxx>
- In-reply-to: <20000906151242.A7778@xxxxxxxxxxxxxxxxx>Comments: In reply to Thomas Köhler <jean-luc@xxxxxxxxxxxxxxxxx> "Re: When should interactive option be set/.zshrc read?" (Sep 6, 3:12pm)
- In-reply-to: <000801c01805$b10d35f0$21c9ca95@xxxxxxxxxxxxxx>
- Mailing-list: contact zsh-workers-help@xxxxxxxxxxxxxx; run by ezmlm
- References: <000601c017ff$bedcbad0$21c9ca95@xxxxxxxxxxxxxx> <200009061249.OAA01000@xxxxxxxxxxxxxxxxxxxxxxxxxxxx> <0G0G00B57UDM35@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx> <000701c01803$20bcb360$21c9ca95@xxxxxxxxxxxxxx> <20000906151242.A7778@xxxxxxxxxxxxxxxxx> <000801c01805$b10d35f0$21c9ca95@xxxxxxxxxxxxxx>
On Sep 6, 2:49pm, Sven Wischnowsky wrote:
}
} > bor@itsrm2% print $options[interactive]
} > on <= correct
} > bor@itsrm2% : | (print $options[interactive])
} > on <= ?? I doubt, this shell can be considered "interactive"
}
} It's a copy of the interactive shell, a subshell. It doesn't read any
} init files whatsoever.
}
} Hm, but maybe we should turn off the option in subshells. (And probably
} other options, too?)
On Sep 6, 1:51pm, Peter Stephenson wrote:
}
} It does unset the options MONITOR and USEZLE, but not INTERACTIVE, for the
} subshell, however. One might have thought that it would either change all
} three or none. In particular, the effect of claiming to be interactive but
} not using ZLE looks a bit weird.
The MONITOR option is turned off because it's used internally to decide
whether you can background a job and then foreground it again. Although
it might be sensible to do
(job1 & job2 ; fg)
it's not sensible to do
(job1 &) ; fg
because the background job is not a child of the shell doing the `fg'.
Possibly the test for whether bg/fg work should be separate from the
test for whether the shell reports a background job's exit status, but
it has never been that way. Bash, for example, shows the "monitor"
option set if you do `(set -o)', but doesn't track the status of any
background jobs.
Of course, you can get the equivalent of the first example with
(job1 & job2 ; wait)
USEZLE is a tad odd. It means you can't do things like
(vared foo)
I believe the reason for this is that a subshell is also used to run
background jobs and jobs in pipelines, neither of which should mess with
the terminal settings; it's likely that zsh could differentiate a
foreground ( ) from a pipeline or backgrounded command for this purpose,
but presently it does not.
On Sep 6, 5:05pm, Andrej Borsenkow wrote:
} Subject: RE: When should interactive option be set/.zshrc read?
}
} > It's a copy of the interactive shell, a subshell. It doesn't read any
} > init files whatsoever.
}
} Um, really. Which is even worse.
What? You've got to be kidding.
} By definition, INTERACTIVE is set "if the standard input is a tty and
} commands are being read from standard input".
That tells how the *startup time* setting of INTERACTIVE is done. It is
not intended to mean that the option changes every time you redirect input.
} Well, I am concerned now how to prevent all definitions from .zshrc to
} be used in subshell.
If you think about this for even a few minutes, you'll realize that all
sorts of things would break if subshells behaved like "zsh -f".
zagzig[339] bash
[schaefer@zagzig]$ alias ls='echo foo'
[schaefer@zagzig]$ (ls)
foo
[schaefer@zagzig]$ function echo () { /bin/echo bar "$@" }
[schaefer@zagzig]$ (ls)
bar foo
[schaefer@zagzig]$ tcsh
[schaefer@candle]$ alias ls 'echo foo'
[schaefer@candle]$ (ls)
foo
[schaefer@candle]$ exit
[schaefer@candle]$ (sleep 30 & sleep 3; fg)
[1] 22485
No job control in subshells.
[schaefer@zagzig]$ (sleep 30 & sleep 3; fg)
fg: no job control
[schaefer@zagzig]$ exit
(Ignore the silly way that tcsh gets the hostname; "zagzig" and "candle"
are host-aliases for the same machine.)
On Sep 6, 3:12pm, Thomas Köhler wrote:
}
} Andrej Borsenkow <Andrej.Borsenkow@xxxxxxxxxxxxxx> wrote:
} >
} [...]
} > I definitely do not want that (ls foo| ...) use my alias for ls; and
} > I do not want window title be mangled. Any idea? Is it possible to
} > provide "clean sandbox" for subshells?
}
} zsh -f
More completely,
zsh -fc 'ls foo|...'
On Sep 6, 5:23pm, Andrej Borsenkow wrote:
}
} Here is what SUS V2 says:
}
} A subshell environment will be created as a duplicate of the shell
} environment, except that signal traps set by that shell environment
} will be set to the default values.
Yup.
Incidentally, as to your specific problem with chpwd(), why not set the
window title in precmd() instead?
--
Bart Schaefer Brass Lantern Enterprises
http://www.well.com/user/barts http://www.brasslantern.com
Zsh: http://www.zsh.org | PHPerl Project: http://phperl.sourceforge.net
Messages sorted by:
Reverse Date,
Date,
Thread,
Author