Bash

是由ssh username@server登錄提供的shell,它是執行~/.profile還是~/.bashrc?

  • April 4, 2018

來自bash 手冊

由遠端 shell 守護程序呼叫

Bash 嘗試確定它何時在其標準輸入連接到網路連接的情況下執行,就像由遠端 shell 守護程序(通常是 rshd)或安全 shell 守護程序 sshd 執行時一樣。如果 Bash 確定它正在以這種方式執行,它會讀取並執行來自 的命令~/.bashrc,如果該文件存在並且是可讀的。如果作為 sh 呼叫,它將不會執行此操作。該--norc選項可用於禁止此行為,該--rcfile選項可用於強制讀取另一個文件,但 rshd 和 sshd 通常都不會使用這些選項呼叫 shell 或允許指定它們。

shell 是由ssh username@serverlogin 還是 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

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