当我运行时,我得到了$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
默认值。
答案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 的名称。