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博客

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/41033.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/41033.shtml
英文地址,請注明出處:http://en.pswp.cn/news/41033.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

生產環境下的終極指南:使用 Docker 部署 Nacos 集群和 MySQL

🌷🍁 博主貓頭虎 帶您 Go to New World.?🍁 🦄 博客首頁——貓頭虎的博客🎐 🐳《面試題大全專欄》 文章圖文并茂🦕生動形象🦖簡單易學!歡迎大家來踩踩~🌺 &a…

01-集群安裝JDK(普通用戶)

機器部署 集群規劃 我們準備三臺服務器kk01、kk02、kk03,內存4G、硬盤50G、處理器4核心2內核(總8) kk01使用 192.168.188.128 kk02使用 192.168.188.129 kk03使用 192.168.188.130 模板機準備 我們先創建一臺作為模板機,后…

C++ 11 新特性 學習筆記

1、字符串原始字面量 R“()”用于取消轉義,可用于路徑表示 運行成功 這兩個RawValue起到描述作用(可以不寫),并不參與輸出 注意,這里輸出中文亂碼 2、nullptr NULL在C中表示0,在非C中表示萬能指針 nullpt…

Vue3 使用json編輯器

安裝 npm install json-editor-vue3 main中引入 main.js 中加入下面代碼 import "jsoneditor";不然會有報錯&#xff0c;如jsoneditor does not provide an export named ‘default’。 圖片信息來源-github 代碼示例 <template><json-editor-vue class…

SQL | 分組數據

10-分組數據 兩個新的select子句&#xff1a;group by子句和having子句。 10.1-數據分組 上面我們學到了&#xff0c;使用SQL中的聚集函數可以匯總數據&#xff0c;這樣&#xff0c;我們就能夠對行進行計數&#xff0c;計算和&#xff0c;計算平均數。 目前為止&#xff0c…

ESP-C3入門21. I2C接口點亮1306驅動的OLED屏

ESP-C3入門21. 點亮1306驅動的OLED屏 一、Espressif/ssd1306 驅動簡介1. 驅動介紹2. OLED充電泵概念 二、I2C 通訊步驟1. 初始化 I2C 總線 (i2c_master_init()函數)&#xff1a;2. 創建 I2C 命令句柄 (i2c_cmd_handle_t cmd i2c_cmd_link_create())&#xff1a;3. 發送啟動信號…

【C#】獲取電腦CPU、內存、屏幕、磁盤等信息

通過WMI類來獲取電腦各種信息&#xff0c;參考文章&#xff1a;WMI_04_常見的WMI類的屬性_wmi scsilogicalunit_fantongl的博客-CSDN博客 自己整理了獲取電腦CPU、內存、屏幕、磁盤等信息的代碼 #region 系統信息/// <summary>/// 電腦信息/// </summary>public p…

flinksql報錯 Cannot determine simple type name “org“

flink版本 1.15 報錯內容 2023-08-17 15:46:02 java.lang.RuntimeException: Could not instantiate generated class WatermarkGenerator$0at org.apache.flink.table.runtime.generated.GeneratedClass.newInstance(GeneratedClass.java:74)at org.apache.flink.table.runt…

低功耗、5Mbps、RS-422 接口電路MS2583/MS2583M

MS2583/MS2583M 是一款低功耗、 5Mbps 、高 ESD 能力的 RS422 通訊接口電路。 在接收狀態下&#xff0c;其功耗僅為 0.3mA 左右。 A/B 端 ESD 耐壓可達 15kV &#xff0c;且無自激現象。當輸出短路發生大電 流導致電路溫度過高時&#xff0c;開啟內部過溫保護電路&…

go 使用 make 初始化 slice 切片使用注意

go 使用 make 初始化 slice 切片 時指定長度和不指定長度的情況 指定長度 package mainimport "fmt"func main() {s1 : make([]int, 5)data : []int{1, 2, 3}for _, v : range data {s1 append(s1, v)}fmt.Println(s1) }// 以上代碼會輸出 // [0 0 0 0 0 1 2 3] //…

vue中的路由緩存和解決方案

路由緩存的原因 解決方法 推薦方案二&#xff0c;使用鉤子函數beforeRouteUpdate&#xff0c;每次路由更新前執行

手寫spring筆記

手寫spring筆記 《Spring 手擼專欄》筆記 IoC部分 Bean初始化和屬性注入 Bean的信息封裝在BeanDefinition中 /*** 用于記錄Bean的相關信息*/ public class BeanDefinition {/*** Bean對象的類型*/private Class beanClass;/*** Bean對象中的屬性信息*/private PropertyVal…

MFC第三十天 通過CToolBar類開發文字工具欄和工具箱、GDI+邊框填充以及基本圖形的繪制方法、圖形繪制過程的反色線模型和實色模型

文章目錄 CControlBar通過CToolBar類開發文字工具欄和工具箱CMainFrame.hCAppCMainFrm.cppCMainView.hCMainView.cppCEllipse.hCEllipse.cppCLine.hCLine.cppCRRect .hCRRect .cpp CControlBar class AFX_NOVTABLE CControlBar : public CWnd{DECLARE_DYNAMIC(CControlBar)pro…

OC調用Swift編寫的framework

一、前言 隨著swift趨向穩定&#xff0c;越來越多的公司都開始用swift來編寫蘋果相關的業務了&#xff0c;關于swift的利弊這里就不多說了。這里詳細介紹OC調用swift編寫的framework庫的步驟 二、制作framework 1、新建項目&#xff0c;選擇framework 2、填寫framework的名稱…

AutoHotkey:定時刪除目錄下指定分鐘以前的文件,帶UI界面

刪除指定目錄下&#xff0c;所有在某個指定分鐘以前的文件&#xff0c;可以用來清理經常生成很多文件的目錄&#xff0c;但又需要保留最新的一部分文件 支持拖放目錄到界面 能夠記憶設置&#xff0c;下次啟動后不用重新設置&#xff0c;可以直接開始 應用場景比如&#xff1a…

WinForm內嵌Unity3D

Unity3D可以C#腳本進行開&#xff0c;使用vstu2013.msi插件&#xff0c;可以實現在VS2013中的調試。在開發完成后&#xff0c;由于項目需要&#xff0c;需要將Unity3D嵌入到WinForm中。WinForm中的UnityWebPlayer Control可以載入Unity3D。先看效果圖。 一、為了能夠動態設置ax…

【boost網絡庫從青銅到王者】第五篇:asio網絡編程中的同步讀寫的客戶端和服務器示例

文章目錄 1、簡介2、客戶端設計3、服務器設計3.1、session函數3.2、StartListen函數3、總體設計 4、效果測試5、遇到的問題5.1、服務器遇到的問題5.1.1、不用顯示調用bind綁定和listen監聽函數5.1.2、出現 Error occured!Error code : 10009 .Message: 提供的文件句柄無效。 [s…

Failed to execute goal org.apache.maven.plugins

原因&#xff1a; 這個文件D:\java\maven\com\ruoyi\pg-student\maven-metadata-local.xml出了問題 解決&#xff1a; 最簡單的直接刪除D:\java\maven\com\ruoyi\pg-student\maven-metadata-local.xml重新打包 或者把D:\java\maven\com\ruoyi\pg-student這個目錄下所有文件…

性能測試場景設計

性能測試場景設計&#xff0c;是性能測試中的重要概念&#xff0c;性能測試場景設計&#xff0c;目的是要描述如何執行性能測試。 通常來講&#xff0c;性能測試場景設計主要會涉及以下部分&#xff1a; 并發用戶數是多少&#xff1f; 測試剛開始時&#xff0c;以什么樣的速率…

Spring WebFlux 的詳細介紹

Spring WebFlux 是基于響應式編程的框架&#xff0c;用于構建異步、非阻塞的 Web 應用程序。它是Spring框架的一部分&#xff0c;專注于支持響應式編程范式&#xff0c;使應用程序能夠高效地處理大量的并發請求和事件。 以下是關于 Spring WebFlux 的詳細介紹&#xff1a; 1. *…