Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

run-shell overrides $SHELL which causes broken default-command on mac #74

Open
von opened this issue Nov 2, 2024 · 4 comments
Open

Comments

@von
Copy link

von commented Nov 2, 2024

As described in tmux-plugins/tpm#295 and tmux/tmux#4166, run-shell is now setting $SHELL to sh which causes tmux-sensible, at line 103, to incorrectly set default-command to use 'sh' instead of the user-selected shell. This means new panes and windows will fire up with sh instead of what the user expects (e.g., zsh).

A work around is to put set -g default-command "reattach-to-user-namespace -l $SHELL" directly into ones .tmux.conf to override tmux-sensible.

One possible fix would seem to be to modify tmux-sensible to use the tmux default-shell variable instead of $SHELL.

Or see this comment for other suggested fixes.

@venlinz
Copy link

venlinz commented Nov 16, 2024

I've also faced this issue, I have analyzed this further more, here are my thoughts on fixing this issue,

  • removing reattach-to-user-namespace would cause breakage for people using tmux < 2.6
  • the default-shell variable may or may not be set by the user so relying on it can cause problems.
  • using tmux showenv -g SHELL will use the system default global $SHELL variable and this overrides the tmux configured default-shell variable, if setting default-shell in tmux config doesn't update the$SHELL variable accordingly, this will load default shell from system's $SHELL variable.

A fault tolerant solution would be to use default-shell variable if it is set, otherwise use tmux showenv -g SHELL as a fallback instead of using $SHELL variable directly.

@bruno- @von please share your opinions on this,
I would love to create a PR implementing this, if it is ok.

@von
Copy link
Author

von commented Nov 16, 2024

That seems reasonable. FYI, as I read the current tmux manpage, default-shell is set by tmux from $SHELL automatically on start-up and does not need to be set by the user's configuration. That matches the behavior I'm seeing (i.e. it is set and I didn't do it).

@venlinz
Copy link

venlinz commented Nov 17, 2024

I didn't know this before, thanks for sharing it.
So we don't have to usetmux showenv -g SHELL if it is supported from the beginning, I will check when tmux started to set default-shell to $SHELL by default on startup.

@venlinz
Copy link

venlinz commented Nov 17, 2024

I confirmed it by looking into the source code of tmux, the default-shell is set to default shell from getpwuid() from 2009.
We can safely use it and ignore tmux showenv -g SHELL

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants