Bash是由
是由ssh username@server
登錄提供的shell,它是執行~/.profile還是~/.bashrc?
來自bash 手冊
由遠端 shell 守護程序呼叫
Bash 嘗試確定它何時在其標準輸入連接到網路連接的情況下執行,就像由遠端 shell 守護程序(通常是 rshd)或安全 shell 守護程序 sshd 執行時一樣。如果 Bash 確定它正在以這種方式執行,它會讀取並執行來自 的命令
~/.bashrc
,如果該文件存在並且是可讀的。如果作為 sh 呼叫,它將不會執行此操作。該--norc
選項可用於禁止此行為,該--rcfile
選項可用於強制讀取另一個文件,但 rshd 和 sshd 通常都不會使用這些選項呼叫 shell 或允許指定它們。shell 是由
ssh username@server
login 還是 nonlogin 提供的?如果它是登錄 shell,為什麼它不執行命令 from
~/.profile
,而是~/.bashrc
根據 bash 手冊執行命令?謝謝。
我的作業系統是 Ubuntu 16.04,但 bash 手冊不是特定於作業系統的。
SSH 啟動一個登錄 shell,正如其手冊頁中所提到的:
如果指定了命令,它將在遠端主機而不是登錄 shell 上執行。
您可以在 Bash 中驗證這一點
shopt login_shell
這將顯示它是否作為登錄 shell 執行。
Bash 在遠端啟動時的行為,無論是作為登錄 shell 還是其他方式,都如您引用的部分所述。您與之比較的行為是互動式 shell的行為,遠端 shell
.bashrc
在互動式登錄 shell 行為之上添加了處理。請注意,Ubuntu 系統通常有一個
.bash_profile
腳本,它優先於.profile
,並且它們通常在任何情況下都有.bash_profile
原始碼…….bashrc