我注意到,当我使用ssh <host> <command>
语法直接在SSH主机上运行命令时,看到的.bashrc
是.bash_profile
(或.profile
)的输出,但看不到。
例如,如果我将以下命令放在两个文件的顶部,
echo ${BASH_SOURCE[0]}
和手动来源.bash_profile
(.bashrc
依次来源),我将看到
$ . .bash_profile
.bash_profile
.bashrc
如果使用ssh <host>
命令的形式通过SSH远程登录到此计算机,则这与我看到的输出相同。(如果我.bash_profile
暂时存放在其他地方,则这两行都不会被回显。)
但是,如果我直接在远程计算机上以的ssh <host> <command>
形式执行命令ssh
,则输出如下所示:
$ ssh <host> echo foo
/home/rlue/.bashrc
foo
我的理解是.bash_profile
和之间的区别.bashrc
是,前者用于登录shell,而后者用于交互式非登录shell。
我得出以下结论:
ssh <host>
仅来源.bash_profile
,而ssh <host> <command>
仅来源.bashrc
,这意味着- 前者是登录外壳,而后者不是。
这些结论正确吗?为什么将其ssh <host> <command>
视为交互式非登录外壳?SSH是否仍然登录到远程计算机以执行命令?
.bashrc
了错误,而.bash_profile
没有出现类似的行。在修正违规行为之前,我借此机会调查了差异。
.bashrc
?该文件不应产生任何输出。.bashrc
使用ssh作为传输工具的任何输出都可能破坏所有工具。