Home
Categories
WIKI
Topic
User
LANGUAGE:
中文
English
关于交互式shell和非交互式shell、登录shell和非登录shell
deepin Talks
2024
views ·
4
replies ·
To
floor
Go
老陌
deepin
2018-10-08 04:08
Author
本帖最后由 myccloves 于 2018-10-7 20:09 编辑
今天看到用户登录时加载配置文件的资料,但被一些登录,非登录等概念搞晕了,所以单独来了解一下这方面的知识。
一、父shell与子shell
登录系统后会启动一个shell,如果在这里运行bash则会启动一个新的shell,这个新的shell就是子shell,而之前的shell就是父shell。我们在运行脚本时也会创建一个新的子shell,当程序结束时又回到父shell中。
在子shell中定义的变量只在该子shell内有效。如果在一个shell脚本中定义了一个变量,当该脚本程序运行时,这个定义的变量只是该脚本程序内的一个局部变量,其他的shell不能引用它,要使某个变量的值可以在其他shell中访问,可以使用export命令对已定义的变量进行输出。export命令会使创建每一个新的shell时定义这个变量的一个拷贝。这个过程称之为变量输出。
如:在父shell中定义:
a=3
export a
Copy the Code
在子shell中是可以访问的
bash
echo $a
Copy the Code
但要注意,在子shell中不能修改父shell中a的值,因为子shell中的变量a是从父shell中复制的,所以改了也只是修改自己的。也就是说子shell会继承(复制)父shell中的变量。
子shell能继承父shell的变量,而这个子shell的变量,随着子shell的退出而消失。但我们可以用. 或source 命令,不开启子shell而运行脚本,从而使变量生效。比如修改完配置文件 ~/.bashrc,可以用 source ~/.bashrc方式重新读取。
二、关于shell的一些配置文件
全局配置
/etc/profile
/etc/profile.d/*.sh
/etc/bashrc
Copy the Code
个人配置
~/.bash_profile
~/.bashrc
Copy the Code
三、关于交互式shell与非交互式shell
交互式shell就是在终端上执行,shell等用待用户输入,输入完成立即执行用户提交的命令,这种模式因为用户与shell交互了,所以是交互式shell。 一般我们登录,执行命令,exit或logout退出shell,这种shell就是交互式shell
非交互式shell,比如以脚本的方式执行,一行一行执行,执行完所有行,shell终止。这个过程没有与用户交互,这就是非交互式shell
四、登录shell与非登录shell
登录shell就是需要用户名和密码才能进入的shell(或通过--login选项生成的shell,比如:su –login username)
非登录shell就是不需要输入用户名和密码就可打开的shell,如直接输入bash打开一个子shell, 在图形界面打开一个终端(terminal)窗口也是一个非登录shell
五、交互式登录shell与非交互式登录shell的区别
交互式登录:
会清除变量 ,通过文件重新读入
输入用户名和密码登录
使用 su - username登录
此种方式登录会调用如下配置文件:
/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile--> ~/.bashrc--> /etc/bashrc
Copy the Code
非交互式登录:
会继承上一个shell的全部变量
su username (注意没有-)
图形界面下打开的终端
执行脚本(执行脚本会打开一个新的子shell,就是创建一个新的进程)
任何其它的bash实例(bash)
此种方式登录会调用如下配置文件:
~/.bashrc--> /etc/bashrc--> /etc/profile.d/*.sh
Copy the Code
Reply
Like 0
Favorite
View the author
All Replies
lixiaobai
deepin
2018-10-09 06:51
#1
对于不搞开发的,shell有时能极大提高工作效率的。有空再拜读下你的博客
Reply
Like 0
View the author
14******70@qq.com
deepin
2018-10-09 07:49
#2
前排支持
Reply
Like 0
View the author
ritter
deepin
2018-10-09 15:45
#3
牛逼,前排!!!!!!!1
Reply
Like 0
View the author
aida
deepin
2018-10-09 22:31
#4
666 支持原创干货!
Reply
Like 0
View the author
Please
sign
in first
Featured Collection
Change
[Tutorial] deepin25 WSL Offline Installation Guide
UOS AI 2.8 Released! Three New Intelligent Agents & Major Evolution
Solid Q&A | deepin 25 Common Questions – The Immutable System Edition
New Thread
Popular Ranking
Change
Update driver for my computer
【Enhanced Repo】Better Deepin Repo is released
Popular Events
More
今天看到用户登录时加载配置文件的资料,但被一些登录,非登录等概念搞晕了,所以单独来了解一下这方面的知识。
一、父shell与子shell
登录系统后会启动一个shell,如果在这里运行bash则会启动一个新的shell,这个新的shell就是子shell,而之前的shell就是父shell。我们在运行脚本时也会创建一个新的子shell,当程序结束时又回到父shell中。
在子shell中定义的变量只在该子shell内有效。如果在一个shell脚本中定义了一个变量,当该脚本程序运行时,这个定义的变量只是该脚本程序内的一个局部变量,其他的shell不能引用它,要使某个变量的值可以在其他shell中访问,可以使用export命令对已定义的变量进行输出。export命令会使创建每一个新的shell时定义这个变量的一个拷贝。这个过程称之为变量输出。
如:在父shell中定义:
在子shell中是可以访问的
但要注意,在子shell中不能修改父shell中a的值,因为子shell中的变量a是从父shell中复制的,所以改了也只是修改自己的。也就是说子shell会继承(复制)父shell中的变量。
子shell能继承父shell的变量,而这个子shell的变量,随着子shell的退出而消失。但我们可以用. 或source 命令,不开启子shell而运行脚本,从而使变量生效。比如修改完配置文件 ~/.bashrc,可以用 source ~/.bashrc方式重新读取。
二、关于shell的一些配置文件
全局配置
个人配置
三、关于交互式shell与非交互式shell
交互式shell就是在终端上执行,shell等用待用户输入,输入完成立即执行用户提交的命令,这种模式因为用户与shell交互了,所以是交互式shell。 一般我们登录,执行命令,exit或logout退出shell,这种shell就是交互式shell
非交互式shell,比如以脚本的方式执行,一行一行执行,执行完所有行,shell终止。这个过程没有与用户交互,这就是非交互式shell
四、登录shell与非登录shell
登录shell就是需要用户名和密码才能进入的shell(或通过--login选项生成的shell,比如:su –login username)
非登录shell就是不需要输入用户名和密码就可打开的shell,如直接输入bash打开一个子shell, 在图形界面打开一个终端(terminal)窗口也是一个非登录shell
五、交互式登录shell与非交互式登录shell的区别
交互式登录: 会清除变量 ,通过文件重新读入
此种方式登录会调用如下配置文件:
非交互式登录: 会继承上一个shell的全部变量
此种方式登录会调用如下配置文件: