![为什么使用 --login 时 bash.exe 运行两次?](https://linux22.com/image/117962/%E4%B8%BA%E4%BB%80%E4%B9%88%E4%BD%BF%E7%94%A8%20--login%20%E6%97%B6%20bash.exe%20%E8%BF%90%E8%A1%8C%E4%B8%A4%E6%AC%A1%EF%BC%9F.png)
答案1
bash
作为登录 shell 的 shell 将获取~/.bash_profile
.
Marcel 的 Cygwin 系统上的文件~/.bash_profile
包含以下行
[[ -z $SSH_AGENT_PID && -z $DISPLAY ]] && exec -l ssh-agent $SHELL -c "bash --login"
ssh-agent
如果当前 shell 环境中没有运行此类代理并且没有可用的 X11 显示,则会启动此操作。SSH 代理将启动两个新bash
shell,一个非交互式 shell 和一个登录 shell(登录 shell 将跳过上面的行,因为它已经$SSH_AGENT_PID
设置)。 SSH 代理通过以 启动来替换其启动的 shell exec
。
bash
可以看到的两个过程是
- 由
ssh-agent
(这是$SHELL -c
)开始的,并且 - 一个由 开始
$SHELL -c
,调用bash --login
。
对我来说,这条线看起来可以简化为
[[ -z $SSH_AGENT_PID && -z $DISPLAY ]] && exec -l ssh-agent bash --login
这将消除ssh-agent
仅用于运行的额外外壳bash --login
。
答案2
@Kusalananda 指出--login
触发 .bash_profile 被调用。我的 .bash_profile 有以下行
[[ -z $SSH_AGENT_PID && -z $DISPLAY ]] && exec -l ssh-agent $SHELL -c "bash --login"
因此每次都会开启第二次狂欢。