【Linux系統化學習】命令行參數 | 環境變量的再次理解

=========================================================================

個人主頁點擊直達:小白不是程序媛

Linux專欄:Linux系統化學習

代碼倉庫:Gitee

=========================================================================

目錄

mian函數傳參獲取環境變量

手動添加環境變量

導出環境變量

environ獲取環境變量

本地變量和環境變量的區別

Linux的命令分類

常規命令

內建命令

環境變量相關指令


mian函數傳參獲取環境變量

上篇文章中我們介紹到C/C++的mian函數是有兩個參數的,其實main函數還有第三個參數是用來獲取我們的環境變量的。

   1 #include<stdio.h>2 #include<stdlib.h>3 #include<string.h>4 #include<sys/types.h>5 #include<unistd.h>6 int main(int argc ,char * argv[],char * env[])7 {8     int i=0;9     for(;env[i];i++)10     {11         printf("pid: %d , env[%d]:%s\n",getpid(),i,env[i]);                                12     }13 }

?

左邊是我們使用指令env得到的結果,右邊是我們運行上面得到的結果;對比兩者得到的內容,我們會發現是一樣的?。其實當我們使用指令啟動進程時候都是shell/bash的子進程,因此子進程的命令行參數和環境變量,都是父進程給我們傳遞的。

父進程確實可以將環境變量傳遞給子進程,說明父進程是有環境變量的但是父進程shell/bash的環境變量是哪來的呢?

要解決這個問題我們還要回顧上篇文章的內容,上篇文章我們提到環境變量是可以修改的如果我們不小心修改錯了會怎么辦呢?不妨上手試一試。

模擬誤操作后我們會發現一些基礎的指令使用不了了,不必擔心只需要重新啟動我們的xshell即可。

通過這個小實驗我們可以證明:

  • 環境變量信息是以腳本配置文件的形式存在的。
  • 我們更改的是bash進程內部的環境變量信息,每一次重新登錄,都會給我們形成新的bash解釋器并且新的bash解釋器自動讀取環境變量配置文件形成自己的環境變量信息?。

這個配置文件是存在在我們家目錄的一個隱藏文件

因此上面的問題都解釋通了:每一次驗證登錄時bash都會讀取.bash_profile這個配置文件中的內容,為bash生成一張環境變量信息表。


手動添加環境變量

Linux下添加環境變量并沒有指令,按照系統內自定的環境變量格式直接在命令行中輸入即可。

我們手動設置的環境變量其實是本地變量,并不在系統的環境變量表中。

導出環境變量

export+環境變量名+環境變量內容

但是我們導出的環境變量只存在于bash進程中的環境變量表中,退出后重新登錄后依然不存在。?

因此我們想要添加自己的環境變量要在上面提到的配置文件中添加。

?

上面中也給大家演示了一種錯誤不要帶空格。

系統環境變量具有全局屬性,是會被所有的進程繼承下去的。


environ獲取環境變量

C語言中有兩個全局變量一個是error(錯誤碼)一個是environ,其中environ是一個二級指針指向環境變量表的首個字符串的地址。

  1 #include<stdio.h>2 #include<stdlib.h>3 #include<string.h>4 #include<sys/types.h>5 #include<unistd.h>6 int main()7 {8     extern char**environ;9     int i=0;10     for(;environ[i];i++)11     {12         printf("%s\n",environ[i]);                                                           13 14     }15 }


結合上篇文章我們就介紹了三種獲取環境變量的方式

  • getenv
  • main函數傳參
  • environ

本地變量和環境變量的區別

  • 本地變量只在bash內部有效,不會被子進程繼承下去。
  • 環境變量通過讓所有的子進程繼承的方式實現全局性!

Linux的命令分類

我們誤操作環境變量后有些大部分的命令是執行不了的,這些命令就是常規命令;但是像echo命令依然可以執行,這些命令就是內建命令。

常規命令

shell創建一個子進程,讓子進程執行的。

內建命令

shell命令行的一個函數當然可以直接讀取shell內部定義的本地變量。


環境變量相關指令

  • echo: 顯示某個環境變量值
  • export: 設置一個新的環境變量
  • env: 顯示所有環境變量
  • set: 顯示本地定義的shell變量和環境變量
  • unset 取消環境變量

這篇文章結合上篇文章就把Linux中命令行參數和環境變量就介紹完了;在后面的文章中我們還會再次涉及到。希望大家讀完后有很大的收獲,也可以在評論區點評文章中的內容和分享自己的看法。您三連的支持就是我前進的動力,感謝大家的支持!!!

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

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

相關文章

前端面試JS—map 和 forEach 的區別

目錄 相同點&#xff1a; 不同點&#xff1a; 相同點&#xff1a; 都是循環遍歷數組中的每一項&#xff08;接收一個函數作為參數&#xff0c;并對每個數組元素執行一次&#xff09;每次執行匿名函數都支持三個參數&#xff1a;&#xff08;三個參數分別為item&#xff08;當前…

js獲取快遞單號小練習

目錄 1、css代碼 2、html代碼 3、js代碼 完整代碼 效果圖 1、css代碼 .box{width: 400px;height: 300px;margin: 100px auto;position: relative;}input{width: 250px;height: 40px;outline: none;}span{display: block;position: absolute;min-width: 270px;max-width: 40…

pytest +uiautomator2+weditor app自動化從零開始

目錄結構1.0 把設備連接單獨移出去了 模塊操作代碼&#xff0c;有一些流程操作和斷言方法 from devices import dv from time import sleep import random from tool.jt import capture_screenshotdef initialization(func):def wrapper():sleep(1)dv.app_stop(com.visteon.…

CSS特效025:旋轉的loading狀態

CSS常用示例100專欄目錄 本專欄記錄的是經常使用的CSS示例與技巧&#xff0c;主要包含CSS布局&#xff0c;CSS特效&#xff0c;CSS花邊信息三部分內容。其中CSS布局主要是列出一些常用的CSS布局信息點&#xff0c;CSS特效主要是一些動畫示例&#xff0c;CSS花邊是描述了一些CSS…

Ubuntu 修改當前用戶的名稱

UBUNTU 2018.04 LTS 64位 修改當前用戶的名稱 操作步驟如下&#xff1a; 假設你的帳號AAA &#xff0c; 打算修改為BBB。開機進入桌面。按下ctrl alt F1~F7 三個組合鍵。功能鍵F1到F7任選1個。 進入黑屏。登陸root 用戶&#xff0c;進入后。修改以下三個文件 /etc/passwd&a…

Linux學習筆記(九)MISC設備驅動

前言 misc 的意思是混合、雜項的&#xff0c;因此 MISC 驅動也叫做雜項驅動。也就是當我們板子上的某些外設無法進行分類的時候就可以使用 MISC 驅動。 MISC 驅動其實就是最簡單的字符設備驅動&#xff0c;通常嵌套在 platform 總線驅動中&#xff0c;實現復雜的驅動&#xff0…

Mysql 索引概念回顧

一、什么是索引 在關系數據庫中&#xff0c;索引是一種單獨的、物理的對數據庫表中一列或多列的值進行排序的一種存儲結構&#xff0c;它是某個表中一列或若干列值的集合和相應的指向表中物理標識這些值的數據頁的邏輯指針清單。索引的作用相當于圖書的目錄&#xff0c;可以根據…

《算法競賽進階指南》------圖論篇

文章目錄 0x01 Telephone Lines POJ - 36620x02 P1073 [NOIP2009 提高組] 最優貿易0x03 道路和航線 BZOJ22000x04 Sorting It All Out POJ - 1094 topo0x05 Sightseeing trip POJ - 1734 最小環問題0x06 Cow Relays POJ - 3613 S到E經過k條邊的最短路0x07 走廊潑水節 &#xff…

為什么Java程序員需要掌握多線程?揭秘并發編程的奧秘

為什么Java程序員需要掌握多線程&#xff1f;揭秘并發編程的奧秘 個人簡介前言多線程對于Java的意義&#x1f4cc;1.提高程序性能&#xff1a;&#x1f4cc;2 提高用戶體驗&#xff1a;&#x1f4cc;3支持并發處理&#xff1a;&#x1f4cc;4 資源共享和同步&#xff1a;&#…

OpenSSL 編程示例

參考&#xff1a;深入探索 OpenSSL&#xff1a;概念、原理、開發步驟、使用方法、使用場景及代碼示例 地址&#xff1a;https://oneisall.blog.csdn.net/article/details/131489812?spm1001.2014.3001.5502 目錄 1. OpenSSL 概念2. OpenSSL 原理3. OpenSSL 開發步驟4. OpenSSL…

C# 語法筆記

1.ref、out&#xff1a;參數傳遞的兩種方式 ref&#xff1a;引用傳遞 using System; namespace CalculatorApplication {class NumberManipulator{public void swap(ref int x, ref int y){int temp;temp x; /* 保存 x 的值 */x y; /* 把 y 賦值給 x */y temp; /* 把 t…

Python中的range()函數詳解:掌握迭代的利器

更多資料獲取 &#x1f4da; 個人網站&#xff1a;ipengtao.com Python中的range()函數是一個強大的工具&#xff0c;用于生成一系列的數字&#xff0c;常用于循環操作。雖然看似簡單&#xff0c;但其靈活性和功能卻不容小覷。在本文中&#xff0c;將深入研究range()函數&…

9. 從零用Rust編寫正反向代理, HTTP2改造篇之HPACK示例, 了解http2頭信息如何處理

wmproxy wmproxy是由Rust編寫&#xff0c;已實現http/https代理&#xff0c;socks5代理&#xff0c; 反向代理&#xff0c;靜態文件服務器&#xff0c;內網穿透&#xff0c;配置熱更新等&#xff0c; 后續將實現websocket代理等&#xff0c;同時會將實現過程分享出來&#xff…

vue3,元素可拖拽,自定義指令,鼠標以及手指事件的寫法不一樣

使用很簡單&#xff0c;直接 <div v-drag><div class"header"></div><div class"content"></div> </div>// 自定義指令 —— 拖動div const vDrag {// 在綁定元素的父組件// 及他自己的所有子節點都掛載完成后調用m…

docker容器_自定義上傳jenkins鏡像(Dockerfile實現)

1.創建jenkins目錄&#xff0c;并上傳相應的包 mkdir /jenkins/ 2.創建一個Dockerfile文件 FROM daocloud.io/library/centos:7#把當前目錄下的jenkins.war包傳到內部容器的/ 下 ADD ./jenkins.war /#把當前目錄下的jdk傳到內部容器的/opt/,并解壓 ADD ./jdk-11.0.19_linu…

程序解釋與編譯

?1.程序的解釋執行方式 程序語言強寫的計策機指令序列稱為“源程序”,計算機并不能直接執行用高級語言編寫的源程序&#xff0c;源程序必須通過“翻譯程序”翻譯成機器指令的形式&#xff0c;計算機才能項別和執行。源程序的翻譯有兩種方式&#xff1a;解釋執行和編譯執行。不…

網絡編程基礎api

1. IP 協議 1.1 IP 分片 &#xff08;1&#xff09;IP 分片和重組主要依靠 IP 頭部三個字段&#xff1a;數據報標識、標志和片偏移 以太網幀的 MTU 是 1500 字節&#xff1b; 一個每個分片都有自己的 IP 頭部&#xff0c;它們都具有相同的標識值&#xff0c;有不同的片偏移…

css 十字分割線(含四等分布局)

核心技術 偽類選擇器含義li:nth-child(2)第2個 lili:nth-child(n)所有的lili:nth-child(2n)所有的第偶數個 lili:nth-child(2n1)所有的第奇數個 lili:nth-child(-n5)前5個 lili:nth-last-child(-n5)最后5個 lili:nth-child(7n)選中7的倍數 border-right: 3px solid white;borde…

EasyExcel-最簡單的讀寫excel工具類

前言&#xff1a; easyExcel 的官網文檔給的示例非常全&#xff0c;可以參考https://easyexcel.opensource.alibaba.com/docs/current/quickstart/read 在此我貼出自己的工具類&#xff0c;可以直接用 導包 <dependency><groupId>com.alibaba</groupId><…

機器學習第15天:GBDT模型

??主頁 Nowl &#x1f525;專欄《機器學習實戰》 《機器學習》 &#x1f4d1;君子坐而論道&#xff0c;少年起而行之 ?? 文章目錄 GBDT模型介紹 Boosting 殘差 GBDT的缺點 python代碼實現 代碼 模型參數解釋 結語 GBDT模型介紹 GBDT&#xff08;Gradient Boos…