深入浅出理解交互式shell和非交互式shell、登录shell和非登录shell的区别_交互式shell是什么意思-程序员宅基地

技术标签: shell的一些配置  shell的分类  -------Linux运维学习----------  linux运维  

 首先我们需要把bash理解为一种模式,我们不如把这种模式想象成类似于洋葱一样的结构,我们可以一层一层剥开,也就是说我们可以一层一层的进入子shell。就好比我们进入一栋楼,打开一个房间是一个环境,在当前这个房间我们又看到了一个门,当我们打开这个门的时候,我们就已经进入了新的环境,也就是新的bash中。这牵扯到一个父shell和子shell的问题。

 用户登录到Linux系统后,系统将启动一个用户shell。在这个shell中,可以使用shell命令或声明变量,也可以创建并运行 shell脚本程序。运行shell脚本程序时,系统将创建一个子shell。此时,系统中将有两个shell,一个是登录时系统启动的shell,另一 个是系统为运行脚本程序创建的shell。当一个脚本程序运行完毕,它的脚本shell将终止,可以返回到执行该脚本之前的shell。从这种意义上来 说,用户可以有许多 shell,每个shell都是由某个shell(称为父shell)派生的。
 在子 shell中定义的变量只在该子shell内有效。如果在一个shell脚本程序中定义了一个变量,当该脚本程序运行时,这个定义的变量只是该脚本程序内 的一个局部变量,其他的shell不能引用它,要使某个变量的值可以在其他shell中被改变,可以使用export命令对已定义的变量进行输出。 export命令将使系统在创建每一个新的shell时定义这个变量的一个拷贝。这个过程称之为变量输出。
同时,在我们使用shell的同时,我们应该清楚shell的一些配置文件的存放位置,按照范围来分,可以分为两种:

(1)全局配置:

/etc/profile
/etc/profile.d/*.sh
/etc/bashrc

(2)个人配置:

~/.bash_profile
~/.bashrc

 我们可以根据shell是否是交互式和shell是否是登录式这两个维度,来对shell进行分类。

交互式shell和非交互式shell(interactive shell and non-interactive shell)

 交互式模式就是在终端上执行,shell等待你的输入,并且立即执行你提交的命令。这种模式被称作交互式是因为shell与用户进行交互。这种模式也是大多数用户非常熟悉的:登录、执行一些命令、退出。当你退出后,shell也终止了。
 shell也可以运行在另外一种模式:非交互式模式,以shell script(非交互)方式执行。在这种模式 下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾EOF,shell也就终止了。

 举个例子,最常见的交互式shell,就是我们利用虚拟机登录Linux系统时的那个等待登录界面,大概如下图所示:

系统在等待我们键入登录的用户名和密码,这就是一种交互式shell,而非交互式shell就像我们写的那些很简单的脚本,比如一个脚本展示出:helloworld。这个脚本不需要我们对其进行交互,它就只是很简单的将其脚本中的命令按顺序执行。

登录式shell和非登录式shell

  登录shell:是需要用户名、密码登录后才能进入的shell(或者通过--login”选项生成的shell)。
非登录shell:当然就不需要输入用户名和密码即可打开的Shell,例如:直接命令“bash”就是打开一个新的非登录shell,在Gnome或KDE中打开一个“终端”(terminal)窗口程序也是一个非登录shell。
执行exit命令,退出一个shell(登录或非登录shell);
执行logout命令,退出登录shell(不能退出非登录shell)。

交互式登录shell和非交互式登录shell的区别

交互式登录:(清除掉所有变量,通过文件重新读入)
(1)直接通过终端输入账号密码登录
(2)使用“su - UserName”切换的用户
执行顺序:(影响该shell的配置文件)
/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile--> ~/.bashrc--> /etc/bashrc

非交互式登录:(会继承上一个shell的全部变量)
(1)su UserName
(2)图形界面下打开的终端
(3)执行脚本   (当我们执行脚本的时候.我们就已经进入到了一个子shell)
(4)任何其它的bash实例
执行顺序:(影响该shell的配置文件)

~/.bashrc--> /etc/bashrc--> /etc/profile.d/*.sh

 使用./test.sh或者 bash ./test.sh执行脚本的时候,是开启一个子shell,这个子shell能继承上一个父shell的变量,而这个子shell的变量,随着子shell的退出而消失。当我们用. test.sh 或者source test.sh时,不开启子shell,在当前shell运行,子shell中的所有值都影响当前。

 一般我们对shell进行一些配置的时候,通常都是对~/.bashrc 和/etc/bashrc这两个文件进行一些配置。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/gui951753/article/details/79154496

智能推荐

快速掌握RabbitMQ(三)——消息确认、持久化、优先级的C#实现_c# rabbitmq 消息为持久化-程序员宅基地

文章浏览阅读490次。阅读目录1 消息确认 1 生产者端消息确认(tx机制和Confirm模式) 2 消费者端消息确认(自动确认和显示确认) 2 消息持久化/优先级 1 消息持久化(Persistent) 2 消息优先级(Priority) 3 小结 回到顶部1 消息确认  在一些场合,如转账、付费时每一条消息都必须保证成功的被处理。AMQP是金融级的消息队列协议,有很高的可靠性,这里介绍在使用RabbitMQ时怎么保证消息被成功处理的。消息确认可以分为两种:一种..._c# rabbitmq 消息为持久化

* swiper in ./node_modules/vue-awesome-swiper/dist/vue-awesome-swiper.js_*swiper in-程序员宅基地

文章浏览阅读4.7k次,点赞11次,收藏6次。项目安装swiper轮播后,启动报错:_*swiper in

三个Makefile通用模板_-duse_debug-程序员宅基地

文章浏览阅读301次。转载自 这里编译可执行MakefileVERSION =1.00CC =gccDEBUG =-DUSE_DEBUGCFLAGS =-WallSOURCES =$(wildcard ./source/*.c)INCLUDES =-I./includeLIB_NAMES =-lfun_a -lfun_soLIB_PATH =-L./libOBJ =$(patsubst %.c, %.o, $(SOURCES))TARGET =app#links$(TAR_-duse_debug

DiskGenius v4.30专业版下载_diskgenius下载 csdn-程序员宅基地

文章浏览阅读329次。文件预览、扇区编辑、加密分区恢复、Ext4分区恢复、RAID恢复等高级功能应有尽有,满足个人用户及企业用户对数据恢复的各种需求。安全快速地恢复硬盘、移动硬盘、U盘、内存卡、RAID、虚拟磁盘上因误删除、格式化、分区损坏、分区丢失、病毒破坏、系统崩溃及其他未知原因丢失的数据。不管数据是什么原因丢失的,只要没有被覆盖,还有残留的文件信息,就可以正常查找到并恢复。双击文档、图片、视频、音频、文本、PDF等可以查看文件内容,以便准确预判恢复效果。(访问密码: 2024)_diskgenius下载 csdn

动态规划之最大子段和_最大子段和动态规划-程序员宅基地

文章浏览阅读1.7k次,点赞3次,收藏19次。最大子段和问题问题描述如下:多重循环求解问题的核心是求解连续的一段子序列使其和最大。最容易想到的便是通过循环遍历寻找最优的下标i,j使得a[i]+…+a[j]的和最大。很容易看出时间复杂度为O(n^3)。#include <iostream>#include<stdlib.h>#include<stdio.h>using namespace st..._最大子段和动态规划

单体架构-->SOA架构-->微服务架构_单体应用架构-程序员宅基地

文章浏览阅读4.1k次,点赞4次,收藏15次。上诉架构图采用了分层架构,按照调用顺序,从上到下为表示层、业务层、数据访问(DAO)层、DB层。表示层负责用户体验,业务层负责业务逻辑,包括电影、订单和用户三个模块。数据访问层负责DB层的数据存取,实现增删改查的功能。业务层定义了应用的业务逻辑,是整个应用的核心。在单体应用中,所有这些模块都集成在一起,这样的系统架构就叫做单体应用架构,或称为巨石型应用架构。单体应用是最早的应用形态,开发和部署都很简单。在中小型项目中使用单体应用架构,能体现出其优势,且单体应用的整体性能主要依赖于硬件资源和逻辑代码实现..._单体应用架构

随便推点

element ui树形组件过滤搜索_elementui tree 实现对树的搜索过滤-程序员宅基地

文章浏览阅读1.1k次。<template> <div> <el-input placeholder="输入关键字进行过滤" v-model="filterText"></el-input> <el-tree :data="menus" :props="defaultProps" node-key="catId" ref="menuTree" @node-click="nodeclick" ._elementui tree 实现对树的搜索过滤

android之Fragment_android fragment-程序员宅基地

文章浏览阅读2.6k次。目录一Fragment的简介和生命周期: <1> Fragment的简介 <2> Fragment的生命周期二将Fragment添加到Activty中使用 <1>概述 <2>使用不兼容方法将Fragemnt添加到Activity中使用 <2.1>不兼容方法..._android fragment

聚类分析(K-means算法)_k-means聚类分析-程序员宅基地

文章浏览阅读7.3w次,点赞65次,收藏508次。一、聚类分析1.1 聚类分析 聚类: 把相似数据并成一组(group)的方法。‘物以类聚,人以群分’ 不需要类别标注的算法,直接从数据中学习模式 所以,聚类是一种 数据探索 的分析方法,他帮助我们在大量数据中探索和发现数据结构1.2 相似度与距离度量 定义距离来度量表示相似度: 欧式距离,曼哈顿距离,闵氏距离..._k-means聚类分析

ARM异常及中断处理介绍(中断是异常的一种)_arm undefine exception-程序员宅基地

文章浏览阅读4.3k次,点赞6次,收藏24次。中断概念:是一个过程,是CPU在执行当前程序的过程中因硬件或软件的原因插入了另一段程序运行的过程。因硬件原因引起的中断过程的出现时不可预测的,即随机的,而软中断是事先安排好的。中断源概念:可以引起中断的信号源。中断优先级ARM处理器中有7种类型的异常,按优先级从高到低的排列如下:复位异常(Reset)、数据异常(Data Abort)、快速中断异常(FIQ)、外部中断异常(IRQ)、预取..._arm undefine exception

技术人,为什么需要构建知识图谱_知识图谱构建什么人需要弄-程序员宅基地

文章浏览阅读2.4k次。转载自:http://geek.csdn.net/news/detail/132909 这个时代,信息极大丰富,人每时每刻都被各种各样的知识、信息轰炸着。如何有效的选择对自己有价值的知识,如何构建一个独属于自己的知识体系并让它为自己创造价值,变得越来越重要。只有知识经过了你的选择和应用,内化为自己的隐性经验,纳入到你的知识体系中,才能真正地为你创造财富。怎样才能建立自己的知识体_知识图谱构建什么人需要弄

解决c++读入文件时多读一个字符_c++>>读取时多一个-程序员宅基地

文章浏览阅读2.4k次,点赞6次,收藏14次。问题阐述在用 c++ ifstream 读入文件是使用 eof() 函数判断结尾总会多出一个字符产生原因其实 EOF(end of file) 这个文件结束标志是在文件的最后一个字符之后的,当读入最后一个字符的时候其实文件并没有读到 EOF 标志,只有下一次读的时候才会读到 EOF,但是在读到 EOF 的时候如果未加处理还是会把 EOF 的值看做一个字符输出,故以下代码总会多输出一个字..._c++>>读取时多一个

推荐文章

热门文章

相关标签