tmux 是否使用 /etc/shells 来选择它将使用的 shell?

tmux 是否使用 /etc/shells 来选择它将使用的 shell?

当我运行时,我得到了$SHELL,并将其列为列表中的第一项。那么是否从那里抓取它并将其用作外壳?tmux/bin/sh/etc/shellstmux

当我跑步时tmux show -g我得到:

assume-paste-time 1
base-index 0
bell-action any
bell-on-alert off
default-command ""
default-shell "/bin/sh"
destroy-unattached off
detach-on-destroy on
display-panes-active-colour red
display-panes-colour blue
display-panes-time 1000
display-time 750
history-limit 2000
lock-after-time 0
lock-command "lock -np"
message-command-style fg=yellow,bg=black
message-style fg=black,bg=yellow
mouse off
mouse-utf8 on
prefix C-b
prefix2 <NONE>
renumber-windows off
repeat-time 500
set-remain-on-exit off
set-titles off
set-titles-string "#S:#I:#W - "#T" #{session_alerts}"
status on
status-interval 15
status-justify left
status-keys emacs
status-left "[#S] "
status-left-length 10
status-left-style default
status-position bottom
status-right " "#{=21:pane_title}" %H:%M %d-%b-%y"
status-right-length 40
status-right-style default
status-style fg=black,bg=green
status-utf8 on
update-environment "DISPLAY SSH_ASKPASS SSH_AUTH_SOCK SSH_AGENT_PID SSH_CONNECTION WINDOWID XAUTHORITY"
visual-activity off
visual-bell off
visual-silence off
word-separators " -_@"

default-shell "/bin/sh"似乎很有趣......但我也会注意到我没有/etc/tmux.conf默认值。

答案1

不会。当服务器启动时,tmux 通过首先查看 $SHELL 来填充默认 shell,如果它无效,它会尝试用户的 shell(来自 passwd 数据库),如果不起作用,则尝试 /bin/sh。

/etc/shells 只是列出了允许用户将哪些 shell 设置为他们的 shell(使用 chsh 或其他命令),它没有指定任何用户的实际 shell 是什么。

答案2

那么 tmux 是否会从那里获取它并将其用作 shell 呢?

否。选择应运行的 shell 中描述man tmux

默认 shell 路径

指定默认 shell。当 default-command 选项设置为空时,它用作新窗口的登录 shell,并且必须是可执行文件的完整路径。启动时,tmux 尝试从第一个合适的 SHELL 环境变量、getpwuid(3) 返回的 shell 或 /bin/sh 设置默认值。当 tmux 用作登录 shell 时,应配置此选项。

首先,tmux开始$SHELL$SHELL通常在您登录系统的早期阶段设置,例如由您的 X 登录管理器设置。

然后,它/etc/passwd使用getpwuid()您可以在 中阅读更多信息进行解析man getpwuid。最后,如果两种方法都失败,则开始 /bin/sh

正如您所看到的,/etc/shells根本没有使用 来tmux确定要运行的 shell。您甚至可以暂时重命名它并且 tmux仍然可以工作:

sudo mv /etc/shells /etc/shells.bak

/etc/shells指定有效登录 shell 的路径名(可选) 如中所述 FHS。例如,它用于chsh验证 shell 的名称。

相关内容