.bash_profile和.bashrc的区别及应用

2023-11-04

一句话总结

.bash_profile是当用户登录后被加载的文件, 随后该文件会显式调用 .bashrc. 其内容主要为设置环境变量.
.bashrc是每次启动新的shell时, 或者被 .bash_profile调用时加载的文件. 其内容主要为设置功能shopt和设置别名alias, 也可用来设置环境变量.

shell与bash

shell是用户与linux系统进行交互的媒介, 而bash是目前linux上最常用的shell

交互式与非交互式

交互式shell等待你输入命令, 然后执行并返回结果
非交互式shell则只是执行预设的命令, 比如读取脚本中的命令并执行, 执行到文件的末尾时shell即结束

登陆与非登陆

登陆通常就是指输入了用户名或者密码后启动的shell(比如系统启动, 远程登陆等), 或者用-l或者--login方式启动的shell
非登陆就是比如图形界面启动的终端, su切换的用户, 通过bash等命令的启动的shell

二者启动的条件及顺序

登陆情况下, 执行顺序通常总是如下的:
执行/etc/profile ⇒ 执行~/.bash_profile ⇒ 执行~/.bashrc ⇒ 执行/etc/bashrc ⇒ 执行~/.bash_profile剩余的语句

只有在非交互式登陆的情况下, 才会只有: 执行~/.bashrc ⇒ 执行/etc/bashrc

修改环境变量时应该修改哪个文件

如果要更改, 更推荐 ~/.bash_profile, 因为这样的更改只会被执行一次. 然而实践中人们通常修改 ~/.bashrc, 因为其无论用什么方式启动新的shell, 其都会被执行.

修改完环境变量后, 若是使用sh filename或者./filename来执行脚本, ~/.bashrc中的设置是会生效的, 因为这种方式会重新建立一个子shell. 在子shell中执行脚本里面的语句, 该子shell继承父shell的环境变量, 但子shell新建的、改变的变量不会被带回父shell.

而使用source filename 则读取脚本里面的语句依次在当前shell里面执行, 没有建立新的子shell. 那么脚本里面所有新建、改变变量的语句都会保存在当前shell里面.

所以若要使刚设置的环境变量强制生效, 则需使用source命令执行脚本中的命令. 例如, 在登录后对 .bash_profile 中的TERM 变量做了修改, 则可以用source命令重新执行.bash_profile中的命令而不用注销并重新登录.

这里需要注意一点, 如果已经启动了一个terminal, 然后修改了 ~/.bashrc, 那么在当前terminal下该修改不会生效, 需要开启一个新的terminal才会生效.

参考

  1. 关于“交互式-非交互式”与“登录-非登陆”shell的总结
  2. 关于“.bash_profile”和“.bashrc”区别的总结
  3. Linux 中/etc/profile、~/.bash_profile 环境变量配置及执行过程
  4. Linux下source命令详解
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.bash_profile和.bashrc的区别及应用 的相关文章

  • 就分页分段内存而言的程序寿命

    我对 x86 Linux 机器中的分段和分页过程有一个令人困惑的概念 如果有人能澄清从开始到结束所涉及的所有步骤 我们将很高兴 x86 使用分页分段内存技术进行内存管理 任何人都可以解释一下从可执行的 elf 格式文件从硬盘加载到主内存到它
  • 如何在 Ubuntu 中创建公共 HTML 文件夹?

    简单的问题 但由于某种原因我无法在谷歌上找到确切的答案 我在 Slicehost 上安装了全新的 Ubuntu 并且想在我的主目录中为包含一堆静态 HTML 文件的简单网站创建一个公共目录 我该怎么做呢 只是打字的问题吗mkdir publ
  • 执行“minikube start”命令时出现问题

    malik malik minikube start minikube v1 12 0 on Ubuntu 18 04 Using the docker driver based on existing profile Starting c
  • Linux 上的 Pervasive ODBC 错误 [01000][unixODBC][驱动程序管理器]无法打开 lib '/usr/local/psql/lib/odbcci.so':找不到文件

    我正在尝试让 Pervasive v10 客户端 ODBC 在 Centos 6 上运行 据我所知 没有 64 位 ODBC 客户端 因此我必须使用 32 位客户端 我终于成功安装了它 但尝试使用时出现以下错误 isql v mydsn 0
  • bash 脚本抱怨文件名太长

    所以我有一个脚本可以执行此操作 jq 是命令行 JSON 处理器 echo Getting LB Node IDs echo LB STATUS jq loadBalancer nodes id 最后一行的输出是 1 2 3 但是当我尝试将
  • 添加文件时运行 shell 命令

    我的 Linux 机器上有一个名为 images 的文件夹 该文件夹连接到一个网站 该网站的管理员可以向该网站添加图片 但是 当添加图片时 我想要一个命令来运行调整目录中所有图片的大小 简而言之 我想知道当新文件添加到特定位置时如何使服务器
  • 并行运行 shell 脚本

    我有一个 shell 脚本 打乱大型文本文件 600 万行和 6 列 根据第一列对文件进行排序 输出 1000 个文件 所以伪代码看起来像这样 file1 sh bin bash for i in seq 1 1000 do Generat
  • 如何让R使用所有处理器?

    我有一台运行 Windows XP 的四核笔记本电脑 但查看任务管理器 R 似乎一次只使用一个处理器 如何让 R 使用全部四个处理器并加速我的 R 程序 我有一个基本系统 我使用它在 for 循环上并行化我的程序 一旦您了解需要做什么 此方
  • 在 Mono 上运行 .Net MVC5 应用程序

    我正在 Windows 上的 Visual Studio 2013 中开发 Net 4 5 1 MVC5 应用程序 现在我想知道 是否可以在Linux Ubuntu 12 04 上运行这个应用程序 可以使用OWIN吗 Owin 可以自托管运
  • 使用包管理器时如何管理 Perl 模块?

    A 最近的问题 https stackoverflow com questions 397817 unable to find perl modules in intrepid ibex ubuntu这让我开始思考 在我尝试过的大多数 Li
  • C修改printf()输出到文件

    有没有办法修改printf为了将字符串输出到文件而不是控制台 我尝试在互联网上查找一些内容 发现了类似的电话dup dup2 and fflush这可能与此有关 EDIT 也许我不清楚 问题是这是C考试问题 问题如下 解释一个通常将字符串输
  • 使用 python 脚本更改 shell 中的工作目录

    我想实现一个用户态命令 它将采用其参数之一 路径 并将目录更改为该目录 程序完成后 我希望 shell 位于该目录中 所以我想实施cd命令 但需要外部程序 可以在 python 脚本中完成还是我必须编写 bash 包装器 Example t
  • 终端关闭时 bash 收到的信号

    使用 trap 来捕获信号 如下所示 i 1 while i lt 33 do trap echo i gt gt log txt i done 并强行关闭终端 那么log txt中的内容就是 redhat linux下 1 18 1 17
  • Bash:单行命令以与 grep 命令相反的状态退出?

    如何减少以下 bash 脚本 grep P STATUS Perfect recess txt exit 1 exit 0 看起来我应该能够用一个命令来完成它 但我这里总共有 3 个命令 我的程序应该 阅读课间休息 txt 如果它包含 ST
  • 绕过 dev/urandom|random 进行测试

    我想编写一个功能测试用例 用已知的随机数值来测试程序 我已经在单元测试期间用模拟对其进行了测试 但我也希望用于功能测试 当然不是全部 最简单的方法是什么 dev urandom仅覆盖一个进程 有没有办法做类似的事情chroot对于单个文件并
  • Bash 中的动态变量名称

    我对 bash 脚本感到困惑 我有以下代码 function grep search magic way to define magic variable 1 ls tail 1 echo magic variable 1 我希望能够创建一
  • 使用os.execlp时,为什么`python`需要`python`作为argv[0]

    代码是这样的 os execlp python python child py other args this works os execlp python child py other args this doesn t work 我读过
  • 如何检查主机是否在您的known_host ssh中

    我的脚本中使用以下命令 将主机添加到 ssh 中的已知主机 VAR2 expect c spawn ssh o StrictHostKeyChecking no REMOTE HOST USER REMOTE HOST IP expect
  • 设置 git 别名,但调用它会给出“找不到命令”

    我想在 git 中设置一个别名来计算存储库中的总行数 因此我进入 Git Bash 并输入以下内容 git config global alias linecount ls files z xargs 0 wc l 我输入命令后 没有出现错
  • 在 macOS 上使用 find 时出现“非法选项”错误

    我试图列出末尾仅带有字母 R 的文件 我用了find在 macOS 终端中如下所示 find type f name R 但我收到消息说illegal option t 第一个参数find是它应该开始寻找的路径 路径 表示当前目录 find

随机推荐

  • php-cgi.exe - FastCGI 进程超过了配置的请求超时时限

    解决方案一 处理 php cgi exe FastCGI 进程超过了配置的请求超时时限 的问题 内容转载 处理 php cgi exe FastCGI 进程超过了配置的请求超时时限 的问题 php技巧 脚本之家 详细错误 HTTP 错误 5
  • 【华为OD机试真题 JAVA】出错的或电路

    JS版 华为OD机试真题 JS 出错的或电路 标题 出错的或电路 时间限制 1秒 内存限制 262144K 语言限制 不限 某生产门电路的厂商发现某一批次的或门电路不稳定 具体现象为计算两个二进制数的或操作时 第一个二进制数中某两个比特位会
  • 利用Java对后端数据进行分页处理(Java假分页)

    代码如下 import java util Collections import java util List java分页 辅助器 public class PageHelper
  • HttpClient远程调用工具类

    文章目录 前言 一 HttpClient工具类 二 使用步骤 1 引入库 前言 提示 当前工具类get方式无法传分页数据 可自行篡改 不行就用post方式哈哈 提示 以下是本篇文章正文内容 下面案例可供参考 一 HttpClient工具类
  • Qt中显示摄像头数据(V4L2三)

    目录 一 通过V4l2来采集用qt显示 1 将V4L2获取摄像头数据封装成一个类 2 设置开始按钮开始采集数据 3 设置停止按钮停止采集数据 4 设置定时器不断采集数据 二 直接用qt多媒体模块来实现采集并且显示 1 在qt工程文件中添加
  • 【网络结构设计】7、RepVGG

    文章目录 一 背景 二 方法 2 1 使用简单结构的卷积神经网络的三个原因 2 2 使用多分支结构的训练时长 2 3 边端设备推理的重参数化 2 4 结构细节 三 效果 论文 RepVGG Making VGG style ConvNets
  • 解决野鸡大学水硕、水博?中国首次发布海外大学排名!

    本文分享中国首次发布的海外大学排名 来源 全国高校信息资料研究会与中国人民大学评价研究中心 新东方在线托福 青塔等平台 编辑 学妹 不久前 我国一科研机构首次发布了对海外学校的评估 网传 这或许会成为以后中国看待海归大学的背景考核依据之一
  • 深度学习:循环神经网络RNN及LSTM

    深度学习 循环神经网络RNN及LSTM 循环神经网络RNN 原理 代码 长短期记忆网络LSTM 原理 遗忘门 记忆门 输出门 代码 循环神经网络RNN 原理 对于传统的神经网络 它的信号流从输入层到输出层依次流过 同一层级的神经元之间 信号
  • 两行css代码实现瀑布流,html,css最简单的瀑布流实现方式且没有缺点!

    两行css代码实现瀑布流 html css最简单的瀑布流实现方式且没有缺点 之前一直使用css position定位 js原生的方法实现 代码如下 html代码段
  • 因果推断理论框架 Potenial Outcomes Framework

    1 Potenial Outcomes Framework 因果效应通常无法直接计算 无法同时观测一个样本施加和不施加干预的结果 所以通常是通过观测数据推断 由于相关性 neq 因果性 观测结果不直接等于ATE Potenial Outco
  • SpringBoot 基本使用

    目录 热部署 方式一 Spring Boot DevTools 方式二 使用JRebel插件 web静态资源的存放 json日期时间设置 组件扫描 资源导入 运行项目的多个实例 资源文件的拷贝问题 读取resources下的文件 SpEL的
  • python三本经典书籍-关于 Python 的经典入门书籍有哪些?

    先说明 这些书是我整理来准备以后慢慢看的 并没有全部购买 更没有全部阅读 排名不分先后 Learn Python the Hard Way 本书是一本Python入门书籍 适合对计算机了解不多 没有学过编程 但对编程感兴趣的读者学习使用 这
  • GPU版本PyTorch详细安装教程

    目录 一 安装显卡驱动 1 查看显卡驱动型号 2 下载显卡驱动 3 查看GPU状态 二 安装Visual Studio 2019 三 安装CUDA 1 下载对应版本的CUDA 2 安装下载好的CUDA 3 设置环境变量 四 安装cudnn
  • ImportError: cannot import name ‘Bar‘ from ‘pyecharts‘ (D:\Anaconda3-2019.03\Anaconda3\lib\site-pack

    如题所示错误 无法从pyecharts中导入Bar 这里我安装的是最新版的pyecharts 新版Bar的导入方式有所改变 之前的导入方式 from pyecharts import Bar 已经不适用在新版本中了 现在的导入方式为 fro
  • redux详细介绍

    redux详细介绍 1 redux 1 redux是什么 redux是一个专门做状态管理的js库 不是react插件库 它可以用在react angular vue等项目中 但基本与react配合使用 作用 集中式管理react应用中多个组
  • python中sort的使用

    描述 sort 函数用于对原列表进行排序 如果指定参数 则使用比较函数指定的比较函数 语法 sort 方法语法 list sort key None reverse False 参数 参数 key 主要是用来进行比较的元素 只有一个参数 具
  • Day10_Git版本控制、项目总结,preview_220627,

    Day10 Git版本控制 手动的管理和记录每个版本之间的变化 项目开发会存在同样的问题 整个项目由多个人共同开发 每个人开发的模块可能一样也可能不一样 不一样 每个人负责不同的 功能模块 一样 多个人共同负责一个模块 代码会产生多个版本
  • mysql8.0及以上版本JDBC(带mysql8.0版本之前jdbc)

    关于Mysql 8 0及以上jdbc MYSQL8 0以前的jdbc格式 注册驱动 Class forName com mysq1 jdbc Driver 获取数据库连接对象 Connection conn Drive rManager g
  • 前端高频面试题 Day01

    文章目录 1 Map 和 Object 的不同 API 不同 以任意类型为 key Map 是有序结构 Map 很快 WeakMap 总结 2 Set 和数组的区别 Set 元素不能重复 API 不一样 Set 是无序的 而数组是有序的 这
  • .bash_profile和.bashrc的区别及应用

    文章目录 一句话总结 shell与bash 交互式与非交互式 登陆与非登陆 二者启动的条件及顺序 修改环境变量时应该修改哪个文件 参考 一句话总结 bash profile是当用户登录后被加载的文件 随后该文件会显式调用 bashrc 其内