mirror of
https://github.com/fish-shell/fish-shell.git
synced 2024-11-26 02:13:38 +08:00
e1d19cf571
It's not super clear what $SHLVL is useful for, but the current definition is essentially "number of shells in the parent processes + 1" which isn't *super useful*? Bash's behavior here is a bit weird in that it increments $SHLVL basically always, but since it auto-execs the last process it will decrement it again, so in practice it's often not incremented. E.g. ``` > echo $SHLVL 1 > bash -c 'echo $SHLVL; bash' 2 >> echo $SHLVL 2 ``` Both bashes here end up having the same $SHLVL because this is equivalent to `echo $SHLVL; exec bash`. Running `echo $SHLVL` and then `bash -c 'echo $SHLVL'` in an interactive bash will have a different result (1 and 2) because that doesn't *exec* the inner bash. That's not something we want to get into, so what we do is increment $SHLVL in every interactive fish. Non-interactive fish will simply import the existing value. That means if you had e.g. a bash that runs a fish script that ends up opening a new fish session, you would have a $SHLVL of *2* - one for the bash, and one for the inner fish. We key this off is_interactive_session() (which can also be enabled via `fish -i`) because it's easy and because `fish -i` is asking for fish to be, in some form, "interactive". That means most of the time $SHLVL will be "how many shells am I deep, how often do I have to `exit`", except for when you specifically asked for a fish to be "interactive". If that's a problem, we can rethink it. Fixes #7864. |
||
---|---|---|
.. | ||
cmds | ||
python_docs_theme | ||
commands.rst | ||
completions.rst | ||
conf.py | ||
design.rst | ||
faq.rst | ||
fish_for_bash_users.rst | ||
fish_indent_lexer.py | ||
index.rst | ||
interactive.rst | ||
language.rst | ||
license.rst | ||
relnotes.rst | ||
tutorial.rst |