Bash

為什麼使用–login時bash.exe會執行兩次?

  • September 15, 2017

執行 cygwin 時,我使用的快捷方式如下:

C:\cygwin\bin\bash.exe --login -i

我不清楚為什麼 bash.exe 執行兩次。我看到兩個程序在任務管理器中執行。echo .Bashrc file has been processed如果我在文件底部放置一個回顯語句,.bashrc我將看到回顯輸出在控制台視窗中出現兩次。

在此處輸入圖像描述

是什麼bash.exe --login導致程序執行兩次?(這是預期的行為嗎?)

作為bash登錄 shell 的 shell 將 source ~/.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 代理通過以exec.

bash可以看到的兩個過程是

  1. ssh-agent(這是$SHELL -c)開始的那個,和
  2. 一個由 開始$SHELL -c,呼叫bash --login.

對我來說,看起來這條線可以簡化為

[[ -z $SSH_AGENT_PID && -z $DISPLAY ]] && exec -l ssh-agent bash --login

這將擺脫ssh-agent僅用於執行的額外外殼bash --login

引用自:https://unix.stackexchange.com/questions/392330