thanks for the interesting example. I would want to note two other programs that follow -C option convention, namely tar and env. The second can be even used to workaround the problem, i.e.:

env -C ~/github zsh -c 'some commands'

but still, a dedicated option would be good.

On Thu, 2 Feb 2023 at 09:05, Roman Perepelitsa <roman.perepelitsa@gmail.com> wrote:
On Thu, Feb 2, 2023 at 9:57 AM Sebastian Gniazdowski
<sgniazdowski@gmail.com> wrote:
>
> Hi,
> make and git have the -C option which works like:
> (
>    builtin cd -q $COPT
>    git/make "$@"
> )
>
> I think that it is very useful, because no lengthy subshell is needed. Zsh doesn't have such option, could it be added? It's pitty that -C is already used by NO_CLOBBER, but maybe some other letter is free (I didn't found any)?

You can do this:

    zsh-in-dir() ( builtin cd -q -- "$1" && builtin exec zsh "${@:2}" )

This forks and execs once, the same as if there was a native `-C dir` option.

Note that your original code has the same performance thanks to an
optimization in zsh. The second fork is elided.

Roman.


--
Best regards,
Sebastian Gniazdowski