~/.bashrc 不是來自 ssh ‘command’
最後
.bashrc
我補充說:touch /tmp/bash_noninteractive_test
跑:
/usr/bin/ssh -v -C root@example.com 'ls'
在主機上(之前以互動方式登錄):
% ls -l /tmp/bash_noninteractive_test ls: cannot access /tmp/bash_noninteractive_test: No such file or directory
我認為
~./bashrc
總是來源於非互動式外殼,比如通過 SSH?我該如何解決?受影響的系統:
% lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 14.04.5 LTS Release: 14.04 Codename: trusty
% lsb_release -a No LSB modules are available. Distributor ID: Debian Description: Debian GNU/Linux 8.11 (jessie) Release: 8.11 Codename: jessie
來自 INVOCATION 章節
man bash
:當一個不是登錄 shell 的互動式 shell 啟動時,bash 會從
/etc/bash.bashrc
和讀取並執行命令~/.bashrc
,如果這些文件存在的話。這可以通過使用該--norc
選項來禁止。file 選項將--rcfile
強制 bash 從 file 而不是/etc/bash.bashrc
and讀取和執行命令~/.bashrc
。例如,當 bash 以非互動方式啟動時,為了執行一個 shell 腳本,它會
BASH_ENV
在環境中查找變數,如果它出現在那裡,則展開它的值,並將展開的值用作要讀取和執行的文件的名稱。Bash 的行為就像執行了以下命令:if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
但 PATH 變數的值不用於搜尋文件名。
因此,除非指向它,否則它似乎
~/.bashrc
永遠不會來源於非互動式外殼。BASH_ENV
根據您希望實際實現的目標,您可能會考慮在遠端主機上啟用
PermitUserRC
和/或PermitUserEnvironment
in/etc/ssh/sshd_config
,然後將所需的環境變數~/.ssh/environment
和/或所需的命令寫入~/.ssh/rc
.**注意:**如果您計劃將 SSH X11 轉發與 一起使用
~/.ssh/rc
,則必須包含一段程式碼以將 X11 會話顯式提供給xauth -q -
命令;sshd(8)
請參閱手冊頁SSHRC 章節中的範例。