我知道两个 bash 登录脚本之间的区别:
.bashrc
仅由“非登录”shell 运行。
.bash_profile
(或.bash_login
或.profile
)由“登录”shell 执行。
是否有人可以举一些好的例子来说明哪些东西更适合仅登录执行,以至于我只会把它们放在里面.bash_profile
,但它们在里面实际上没有意义.bashrc
?
(我知道我们大多数人的资料.bashrc
都来自.bash_profile
,因此相反的问题似乎没有多大意义……)
答案1
由于 a.bashrc
适用于非登录 shell,因此我避免使用任何会回显到屏幕的命令。我还遇到过这样的情况:echo 语句.bashrc
会导致 sftp 和 rsync 命令失败(可能还有 scp 命令)。
# Print some information as we log in
# -s: OS Name -n: Node name -r: OS Release
uname -snr
uptime
另外,您通常不会从非交互式 shell 运行 ssh-agent。因此我将其放在 中.bash_profile
。
if [ -f ~/.ssh/ssh-agent ]; then . ~/.ssh/ssh-agent; fi
答案2
Byobu 是一个很好的例子,说明您永远不应该将其放入其中.bashrc
。
否则,它将在其每一个“虚拟终端”中递归运行自身;-)
你可以尝试一下,这很有趣。
这就是将它放入的原因.profile
,这样 byobu(实际上只是 screen 的包装器)在登录时只会加载一次。而 byobu 本身可以启动新的交互式 bash 会话。