当前位置: 首页 > news >正文

shell的两种属性: 交互(interactive)与登录(login)

1. 背景

在看shell变量的时候引起了兴趣: 局部变量,全局变量,环境变量,shell的配置文件,参考博客:

http://c.biancheng.net/view/773.html

2. 交互式与非交互式

参考博客:

shell的两个属性:是否交互式(interactive), 是否登录(login) - 知乎 

man bash:

通常的理解是:

 man手册中给我们提供了怎么判断交互与非交互的方法:

 所以我看看我自己的shell是否是交互式的:

liaojunwu@liaojunwu-virtual-machine:~$ echo $PS1
\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$
liaojunwu@liaojunwu-virtual-machine:~$ 
liaojunwu@liaojunwu-virtual-machine:~$ echo $-
himBH
liaojunwu@liaojunwu-virtual-machine:~$ 

 3. 登录与非登陆

man bash:

通常的理解是:

 su和su -命令的区别参考博客: 一分钟知识点:linux命令之su 和 su - 

可以用shopt login_shell的方法来看看shell是否设置了login_shell选项,我看看我自己的shell:

liaojunwu@liaojunwu-virtual-machine:~$ shopt login_shell
login_shell    	off
liaojunwu@liaojunwu-virtual-machine:~$ 
liaojunwu@liaojunwu-virtual-machine:~$ su - liaojunwu --login
密码: 
liaojunwu@liaojunwu-virtual-machine:~$ 
liaojunwu@liaojunwu-virtual-machine:~$ 
liaojunwu@liaojunwu-virtual-machine:~$ shopt login_shell
login_shell    	on
liaojunwu@liaojunwu-virtual-machine:~$ 

 4. 为什么要知道这两种属性?

因为涉及到shell配置方式的不同,继续看man手册:

交互与登录属性一共有四种组合,我们只看三种:

登录交互与登录非交互: bash配置shell的顺序是:

/etc/profile->~/.bash_profile->~/.bash_login->~/.profile->~/.bashrc

展开/etc/profile又可以看到登录交互会去配置/etc/bash.bashrc

# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).if [ "$PS1" ]; thenif [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then# The file bash.bashrc already sets the default PS1.# PS1='\h:\w\$ 'if [ -f /etc/bash.bashrc ]; then. /etc/bash.bashrcfielseif [ "`id -u`" -eq 0 ]; thenPS1='# 'elsePS1='$ 'fifi
fiif [ -d /etc/profile.d ]; thenfor i in /etc/profile.d/*.sh; doif [ -r $i ]; then. $ifidoneunset i
fiexport PATH=$PATH:/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin

非登录交互时: bash的配置顺序是:

/etc/bash.bashrc->~/.bashrc

我们可以看到不论是/etc/bash.bashrc还是~/.bashrc,都要求是交互模式才行:

 

 5. 验证

登录交互: /etc/profile->/etc/bash.bashrc->~/.bash_profile->~/.bash_login->~/.profile->~/.bashrc

liaojunwu@liaojunwu-virtual-machine:~$ 
liaojunwu@liaojunwu-virtual-machine:~$ echo $PS1
\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$
liaojunwu@liaojunwu-virtual-machine:~$ 
liaojunwu@liaojunwu-virtual-machine:~$ 
liaojunwu@liaojunwu-virtual-machine:~$ 
liaojunwu@liaojunwu-virtual-machine:~$ shopt login_shell
login_shell    	on
liaojunwu@liaojunwu-virtual-machine:~$ 
liaojunwu@liaojunwu-virtual-machine:~$ 
liaojunwu@liaojunwu-virtual-machine:~$ logout
liaojunwu@liaojunwu-virtual-machine:~$ exit
注销
liaojunwu@liaojunwu-virtual-machine:~$ exit
注销
liaojunwu@liaojunwu-virtual-machine:~$ exit
注销
liaojunwu@liaojunwu-virtual-machine:~$ su - root
密码: 
[DEBUG]in /etc/profile!
[DEBUG]in /etc/bash.bashrc!
root@liaojunwu-virtual-machine:~# 
root@liaojunwu-virtual-machine:~# 
root@liaojunwu-virtual-machine:~# su - liaojunwu --login
[DEBUG]in /etc/profile!
[DEBUG]in /etc/bash.bashrc!
[DEBUG]in ~./profile!
[DEBUG]in ~./bashrc !
liaojunwu@liaojunwu-virtual-machine:~$ 

非登录交互: /etc/bash.bashrc->~/.bashrc

[DEBUG]in /etc/bash.bashrc!
[DEBUG]in ~./bashrc !
liaojunwu@liaojunwu-virtual-machine:~$ echo $-
himBH
liaojunwu@liaojunwu-virtual-machine:~$ shopt login_shell
login_shell    	off
liaojunwu@liaojunwu-virtual-machine:~$ 
liaojunwu@liaojunwu-virtual-machine:~$ 
liaojunwu@liaojunwu-virtual-machine:~$ 
liaojunwu@liaojunwu-virtual-machine:~$ 
liaojunwu@liaojunwu-virtual-machine:~$ bash -i
[DEBUG]in /etc/bash.bashrc!
[DEBUG]in ~./bashrc !
liaojunwu@liaojunwu-virtual-machine:~$ 

6. PS1变量

参考博客: bash下变量PS1的完整理解_ps1变量_whowin的博客-CSDN博客

相关文章:

shell的两种属性: 交互(interactive)与登录(login)

1. 背景 在看shell变量的时候引起了兴趣: 局部变量,全局变量,环境变量,shell的配置文件,参考博客: http://c.biancheng.net/view/773.html 2. 交互式与非交互式 参考博客: shell的两个属性:是否交互式(interactive), 是否登录…...

实现简单的element-table的拖拽效果

第一步&#xff0c;先随便创建element表格 <el-table ref"dragTable" :data"tableData" style"width: 100%" border fit highlight-current-row><el-table-column label"日期" width"180"><template slot-sc…...

Web网页浏览器远程访问jupyter notebook服务器【内网穿透】

文章目录 前言1. Python环境安装2. Jupyter 安装3. 启动Jupyter Notebook4. 远程访问4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5. 固定公网地址 前言 Jupyter Notebook&#xff0c;它是一个交互式的数据科学和计算环境&#xff0c;支持多种编程语言&#xff0c;如…...

干翻Dubbo系列第十一篇:Dubbo常见协议与通信效率对比

文章目录 文章说明 一&#xff1a;协议 1&#xff1a;什么是协议 2&#xff1a;协议和序列化关系 3&#xff1a;协议组成 &#xff08;一&#xff09;&#xff1a;头信息 &#xff08;二&#xff09;&#xff1a;体信息 4&#xff1a;Dubbo3中常见的协议 5&#xff1a;…...

春秋云镜 CVE-2020-17530

春秋云镜 CVE-2020-17530 S2-061 靶标介绍 对CVE-2019-0230的绕过&#xff0c;Struts2官方对CVE-2019-0230的修复方式是加强OGNL表达式沙盒&#xff0c;而CVE-2020-17530绕过了该沙盒。当对标签属性中的原始用户输入进行评估时&#xff0c;强制 OGNL 评估可能会导致远程代码执…...

【java毕业设计】基于Spring Boot+Vue+mysql的论坛管理系统设计与实现(程序源码)-论坛管理系统

基于Spring BootVuemysql的论坛管理系统设计与实现&#xff08;程序源码毕业论文&#xff09; 大家好&#xff0c;今天给大家介绍基于Spring BootVuemysql的论坛管理系统设计与实现&#xff0c;本论文只截取部分文章重点&#xff0c;文章末尾附有本毕业设计完整源码及论文的获取…...

华为在ospf area 0单区域的情况下结合pbr对数据包的来回路径进行控制

配置思路&#xff1a; 两边去的包在R1上用mqc进行下一跳重定向 两边回程包在R4上用mqc进行下一跳重定向 最终让内网 192.168.10.0出去的数据包来回全走上面R-1-2-4 192.168.20.0出去的数据包来回全走 下面R1-3-4 R2和R3就是简单ospf配置和宣告&#xff0c;其它没有配置&#…...

PyQt5登录界面跳转

目录 1、设计ui界面 2、设计逻辑代码&#xff0c;实现登录界面跳转 3、结果 1、设计ui界面 设计后的ui界面 在这里可以设置密码不显示 这里可以设置快捷键 最后将ui界面转为py文件后获得的逻辑代码为&#xff1a;&#xff08;文件名为Login.py&#xff09; # -*- coding: u…...

git add 用法

git add 是 Git 的一个命令&#xff0c;用于将更改的文件加入到暂存区&#xff08;staging area&#xff09;&#xff0c;准备提交这些更改。以下是该命令的常见用法&#xff1a; 添加单个文件 git add 文件名添加多个文件 git add 文件名1 文件名2 ...添加所有当前目录下的更改…...

系统架构设计师---2018年下午试题1分析与解答(试题三)

系统架构设计师---2018年下午试题1分析与解答 试题三 阅读以下关于嵌入式实时系统相关技术的叙述,在答题纸上回答问题 1 和问题 2。 【说明】 某公司长期从事宇航领域嵌入式实时系统的软件研制任务。公司为了适应未来嵌入式系统网络化、智能化和综合化的技术发展需要,决定…...

面试时如何回答接口测试怎么进行

一、什么是接口测试 接口测试顾名思义就是对测试系统组件间接口的一种测试&#xff0c;接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换&#xff0c;传递和控制管理过程&#xff0c;以及系统间的相互逻辑依赖关系等。 …...

【LeetCode】647.回文子串

题目 给你一个字符串 s &#xff0c;请你统计并返回这个字符串中 回文子串 的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子字符串 是字符串中的由连续字符组成的一个序列。 具有不同开始位置或结束位置的子串&#xff0c;即使是由相同的字符组成&#xff0c;也会…...

【Git】SSH到底是什么

一、SSH初探 1、SSH是什么&#xff1f; SSH是一个安全协议&#xff0c;类似有SSL、TSL Git有四种协议&#xff1a;本地协议、Git协议、HTTP协议、SSH协议 SSH协议的优缺点&#xff1a; 优点&#xff1a;SSH访问更加安全&#xff0c;有利于公司的开发维护&#xff0c;并且可…...

当你出差在外时,怎样轻松访问远程访问企业局域网象过河ERP系统?

文章目录 概述1.查看象过河服务端端口2.内网穿透3. 异地公网连接4. 固定公网地址4.1 保留一个固定TCP地址4.2 配置固定TCP地址 5. 使用固定地址连接 概述 ERP系统对于企业来说重要性不言而喻&#xff0c;不管是财务、生产、销售还是采购&#xff0c;都需要用到ERP系统来协助。…...

机器学习与模型识别1:SVM(支持向量机)

一、简介 SVM是一种二类分类模型&#xff0c;在特征空间中寻找间隔最大的分离超平面&#xff0c;使得数据得到高效的二分类。 二、SVM损失函数 SVM 的三种损失函数衡量模型的性能。 1. 0-1 损失&#xff1a; 当正例样本落在 y0 下方则损失为 0&#xff0c;否则损失为…...

在CentOS7.9上安装最新版本Docker安装步骤

1、查看系统版本&#xff1a; cat /etc/redhat-release 2、卸载原有版本&#xff08;如有的话&#xff09; sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ d…...

基于 spring boot 的动漫信息管理系统【源码在文末】

半山腰总是最挤的&#xff0c;你得去山顶看看 大学生嘛&#xff0c;论文写不出&#xff0c;代码搞不懂不要紧&#xff0c;重要的是&#xff0c;从这一刻就开始学习&#xff0c;立刻马上&#xff01; 今天带来的是最新的选题&#xff0c;基于 spring boot 框架的动漫信息管理系…...

vue项目根据word模版导出word文件

一、安装依赖 //1、docxtemplaternpm install docxtemplater pizzip -S//2、jszip-utilsnpm install jszip-utils -S//3、pizzipnpm install pizzip -S//4、FileSaver npm install file-saver --save二、创建word模版 也就是编辑一个word文档&#xff0c;文档中需要动态取值的…...

PHP 从 URL(链接) 字符串中获取参数

PHP 从 URL&#xff08;链接&#xff09; 字符串中获取参数 //URL(链接)字符串 $url https://www.baidu.com/?name小洪帽i&sex男&age999; //parse_url 函数从一个 URL 字符串中获取参数 $urlparse_url($url); //输出获取到的内容 echo "<pre>"; pri…...

第一百三十一天学习记录:数据结构与算法基础:栈和队列(下)(王卓教学视频)

队列的表示和操作的实现 循环顺序队列是一种使用数组来实现的队列结构&#xff0c;其中头指针和尾指针表示队列的头部和尾部位置。 当队列为空时&#xff0c;头指针和尾指针都指向同一个位置&#xff0c;即数组的第一个位置。这是因为在空队列中&#xff0c;没有任何元素可以作…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...