关于.bash_profile,.bashrc,以及应该写入别名的位置? [重复]

问题描述 投票:114回答:4

可能重复:What's the difference between .bashrc, .bash_profile, and .environment?

好像我用了

alias ls='ls -F'

在Mac OS X上的.bashrc中,新创建的shell将没有该别名。我需要再次键入bash,该别名将生效。

如果我在托管公司登录Linux,.bashrc文件有一条注释行说:

对于非登录shell

并且.bash_profile文件有评论说

用于登录shell

那么别名应该写在哪里?为什么我们将登录shell和非登录shell分开?

一些网页上说使用.bash_aliases,但它似乎不适用于Mac OS X.

bash shell environment
4个回答
154
投票

将登录和非登录shell分开的原因是因为每次启动Bash的新副本时都会重新加载.bashrc文件。只有在您登录或使用适当的标志告诉Bash充当登录shell时才会加载.profile文件。

亲身,

  • 我将我的PATH设置放入.profile文件中(因为我有时使用其他shell);
  • 我将我的Bash别名和函数放入我的.bashrc文件中;
  • 我把它 #!/bin/bash # # CRM .bash_profile Time-stamp: "2008-12-07 19:42" # # echo "Loading ${HOME}/.bash_profile" source ~/.profile # get my PATH setup source ~/.bashrc # get my Bash aliases 在我的.bash_profile文件中。

哦,你需要再次输入bash获取新别名的原因是Bash在启动时加载你的.bashrc文件,但除非你告诉它,否则它不会重新加载它。您可以通过键入来重新加载.bashrc文件(而不需​​要第二个shell)

source ~/.bashrc

加载.bashrc文件就像你直接向Bash输入命令一样。


115
投票

查看http://mywiki.wooledge.org/DotFiles,了解除man bash之外的主题资源。

摘要:

  • 你只登录一次,那就是读取并执行~/.bash_profile~/.profile的时候。由于您从登录shell运行的所有内容都继承了登录shell的环境,因此您应该将所有环境变量放在那里。像LESSPATHMANPATHLC_*,...例如,请参阅:My .profile
  • 登录后,您可以运行多个shell。想象一下登录,运行X,并在X中使用bash shell启动一些终端。这意味着您的登录shell启动了X,它继承了您的登录shell的环境变量,它启动了您的终端,启动了您的非登录bash shell。您的环境变量在整个链中传递,因此您的非登录shell不再需要加载它们。由于这个原因,非登录shell只执行~/.bashrc,而不是/.profile~/.bash_profile,因此在那里定义仅适用于bash的所有内容。这是函数,别名,仅限bash的变量,如HISTSIZE(这不是环境变量,不导出它!),shell选项与setshopt等。例如,请参阅:My .bashrc
  • 现在,作为UNIX特性的一部分,login-shell不执行~/.bashrc而只执行~/.profile~/.bash_profile,因此您应该从后者手动获取该值。你会看到我在我的~/.profile那样做:source ~/.bashrc

12
投票

从bash手册页:

当bash作为交互式登录shell或作为具有--login选项的非交互式shell调用时,它首先从文件/etc/profile读取并执行命令(如果该文件存在)。在读取该文件后,它按顺序查找~/.bash_profile~/.bash_login~/.profile,并从存在且可读的第一个读取和执行命令。启动shell以抑制此行为时,可以使用--noprofile选项。

当登录shell退出时,bash从文件~/.bash_logout读取并执行命令(如果存在)。

当启动不是登录shell的交互式shell时,如果该文件存在,bash将从~/.bashrc读取并执行命令。这可以通过使用--norc选项来禁止。 --rcfile文件选项将强制bash从文件而不是~/.bashrc读取和执行命令。

因此,如果要为登录shell和交互式非登录shell获取相同的行为,则应将所有命令放在.bashrc.bash_profile中,然后将另一个文件source放在第一个。


1
投票

.bash_profile被加载为“登录shell”。我不确定在OS X上会是什么,但在X11或虚拟终端的Linux上。

每次运行Bash时都会加载.bashrc。这是你应该在打开一个新的Terminal.app窗口时放置你想要加载的东西的地方。

我个人把所有内容放在.bashrc中,这样我就不必重新启动应用程序以使更改生效。

© www.soinside.com 2019 - 2024. All rights reserved.