当我运行$SHELL
时,tmux
我得到/bin/sh
,并将/etc/shells
其列为列表中的第一项。那么是否tmux
从那里抓住它并将其用作外壳?
当我跑步时,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
默认值。
不,tmux 在服务器启动时通过首先查看 $SHELL 来填充 default-shell,如果这无效,它会尝试用户的 shell(来自 passwd db),如果这不起作用,那么 /bin/sh。
/etc/shells 只是列出了允许用户将哪些 shell 设置为他们的 shell(使用 chsh 或诸如此类),它没有指定任何用户的实际 shell 是什么。
不。选择应该运行的外壳在以下内容中进行了描述
man tmux
:首先,
tmux
开始$SHELL
。$SHELL
通常在您登录系统的早期阶段设置,例如由您的 X 登录管理器设置。/etc/passwd
然后,它使用getpwuid()
您可以在 中阅读更多信息进行解析man getpwuid
。最后,如果两种方法都失败了,它就会开始/bin/sh
。如您所见,
/etc/shells
根本不使用 bytmux
来确定要运行的 shell。您甚至可以暂时重命名它并且tmux
仍然可以工作:/etc/shells
指定有效登录 shell 的路径名(可选) ,如 FHS中所述。例如,它用于chsh
验证 shell 的名称。