是bashrc还是bash_profile?


49

我知道两个bash登录脚本之间的区别:

.bashrc 仅由“非登录” shell运行。

.bash_profile(或.bash_login.profile)由“登录” shell执行。

有没有人有一些很好的例子说明哪些事情更适合仅登录执行,例如我只将它们放进去.bash_profile,但实际上并没有什么意义.bashrc呢?

(我知道我们大多数源.bashrc出的.bash_profile,所以似乎并没有在相反的问题多一点...)


Answers:


24

由于a .bashrc用于非登录外壳程序,因此避免了任何回显到屏幕的命令。我也遇到过一些经验,在.bashrc这些经验中,echo语句将导致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
如果您使用〜/ .profile而不是〜/ .bash_profile,则即使您更改shell,仍然可以使用。.〜/ .bash_profile用于bash特定的东西。
LassePoulsen

1
但是bash只会运行.it.bash_profile或.profile,因此,如果要同时使用两者,则需要从.bash_profile或其他内容中获取.profile。实际上,这不是一个坏主意
唐·福克纳

@Source和@Don:好点。我以前在.bash_profile中有Bashisms,但是现在我切换到了更通用的东西。也许按顺序使用.profile。
Stefan Lasiewski,2010年

关于会干扰通过标准流实现的远程文件传输方法的产生输出的命令.bashrc,解决方案是将此类命令置于检查外壳是否是交互式的代码,并仅在外壳是否交互式的代码进行。用户.bashrc在Ubuntu中/etc/skel/.bashrc创建帐户时以及系统范围内复制的默认文件/etc/bash.bashrc已经包含用于检查并返回外壳是否非交互的代码(尽管仍然必须将其产生输出的命令置于)。
伊莱亚·卡根

8

Byobu是您永远都不应放入的示例的一个很好的例子.bashrc

否则,它将在其“虚拟终端”的每个单独终端中递归运行;-)

您可以尝试一下,这很有趣。

这就是为什么将其放入.profile,因此byobu(实际上只是屏幕周围的包装纸)在登录时仅加载一次。并且byobu本身可以启动新的交互式bash会话。


这是一个很好的例子。也感谢您指向Byobu的指针。现在开始尝试。
唐·福克纳
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.