首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >关于.bash_profile,.bashrc,别名应该写在哪里?

关于.bash_profile,.bashrc,别名应该写在哪里?
EN

Stack Overflow用户
提问于 2009-05-24 02:37:22
回答 4查看 107.8K关注 0票数 142

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

看起来如果我使用

alias ls='ls -F'

在Mac上的.bashrc中,新创建的外壳将不具有该别名。我需要再次键入bash,该别名将生效。

如果我在托管公司上登录Linux,.bashrc文件有一个注释行,上面写着:

非登录shell的

.bash_profile文件中有一条注释:

登录shell的

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

一些网页上说使用.bash_aliases,但它似乎不能在Mac上运行。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-05-24 02:42:48

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

就个人而言,

  • 我将我的PATH设置放入.profile文件中(因为我有时会使用其他shell);
  • 我将Bash别名和函数放入.bashrc文件中;
  • 我放入了以下内容

#!/bin/bash ## CRM .bash_profile时间戳:"2008-12-07 19:42“## echo”正在加载${HOME}/.bash_profile“来源~/.profile #获取我的路径设置源~/.bashrc #获取我的Bash别名

在我的.bash_profile文件中。

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

source ~/.bashrc

这将加载.bashrc文件,就像您直接向Bash键入命令一样。

票数 182
EN

Stack Overflow用户

发布于 2009-05-24 06:22:38

除了man bash之外,还可以查看http://mywiki.wooledge.org/DotFiles获取有关该主题的优秀资源。

摘要:

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

Stack Overflow用户

发布于 2009-05-24 02:46:23

从bash手册页:

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

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

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

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

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/902946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档