set和setenv


今天用set設置PATH變量(加一個路徑),發現雖然echo的時候顯示修改成功了,實際執行命令的時候確沒有去那個路徑查找;當前shell是c shell(csh).

在網上找了一些材料,總結如下:
 
1.說明
使用set和setenv命令可以設置shell選項或者列出shell變量,其中setenv 是csh的命令,在bash中用export命令,alias作用相當windows下的快捷方式。

2.語法格式

set 變量名 = 內容
set 變量名 =(內容1 內容2 )
set 變量名 ="內容1 內容2"

setenv 變量名 內容
setenv 變量名 "內容1 內容2"
setenv 變量名 '內容1 內容2'

alias 簡化名稱 原文件名
alias 簡化名稱 "原文件名 參數"
 
3。 set主要是用來設置變量,這里的變量是普通變量,就像 C語言里一樣,使用一個變量以前要申明一下。

setenv中的env就是環境environment的簡寫,這個命令是用來設置環境變量的,譬如說設置文件路徑、本地顯示啊什么的,舉個例,如果想調用服務器的軟件在本地顯示,用這個命令:setenv DISPLAY 1xx.1xx.1xx.1xx:0 。在bash中export命令和csh中的setenv命令類似。

4。環境變量和內部變量:后者不能被子進程繼承(如同C里的局部變量)--改環境變量就會自動改內部變量,反之不然。“set”可給出內部變量列表,“env”可給出環境變量列表。繼承只對環境變量有效

sh: PATH=/usr/bin:$PATH ; export PATH--注意:在export前為內部變量,之后為環境變量。

Csh: set setenv PATH /usr/bin:$PATH--注意: 在csh中環境變量的賦值(setenv)沒有等號, 而內部變量的賦值(set)有等號。

 

 

 

 

 

 

 

 

 

一.shell環境變量的分類以及set env export的區別:

set:顯示(設置)shell變量 包括的私有變量以及用戶變量,不同類的shell有不同的私有變量 bash,ksh,csh每中shell私有變量都不一樣

env:顯示(設置)用戶變量變量

export:顯示(設置)當前導出成用戶變量的shell變量。

舉個例子來講:

[www.linuxidc.com@linuxidc ~]$ aaa=bbb --shell變量設定     
[www.linuxidc.com@linuxidc ~]$ echo $aaa      
bbb     
[www.linuxidc.com@linuxidc ~]$ env| grep aaa --設置完當前用戶變量並沒有     
[www.linuxidc.com@linuxidc ~]$ set| grep aaa  --shell變量有     
aaa=bbb     
[www.linuxidc.com@linuxidc ~]$ export| grep aaa --這個指的export也沒導出,導出變量也沒有     
[www.linuxidc.com@linuxidc ~]$ export aaa   --那么用export 導出一下     
[www.linuxidc.com@linuxidc ~]$ env| grep aaa  --發現用戶變量內存在了     
aaa=bbb  

 

總結:linux 分 shell變量(set),用戶變量(env), shell變量包含用戶變量,export是一種命令工具,是顯示那些通過export命令把shell變量中包含的用戶變量導入給用戶變量的那些變量.

二:使用unset命令來清除環境變量,注意set env  export設置的變量,都可以用unset來清除的

清除環境變量的值用unset命令。如果未指定值,則該變量值將被 設為NULL。示  
例如下:    
$ export TEST="Test..." #增加一個環境變量TEST    
$ env|grep TEST #此命令有輸入,證明環境變量TEST已經存在了    
TEST=Test...    
$ unset $TEST #刪除環境變量TEST    
$ env|grep TEST #此命令沒有輸出,證明環境變量TEST已經不存在了 

 

 

三:使用readonly命令設置只讀變量

使用了readonly命令的話,變量就不可以被修改或清除了。示例如下:  
$ export TEST="Test..." #增加一個環境變量TEST  
$ readonly TEST #將環境變量TEST設為只讀  
$ unset TEST #會發現此變量不能被刪除  
-bash: unset: TEST: cannot unset: readonly variable  
$ TEST="New" #會發現此也變量不能被修改  
-bash: TEST: readonly variable  

 

四:最根本的設置、更改變量的配置文件 ~/.bash_profile   ~/.bashrc   ~/.bash_logout

~/.bash_profile  用戶登錄時被讀取,其中包含的命令被執行

~/.bashrc  啟動新的shell時被讀取,並執行

~/.bash_logout  shell 登錄退出時被讀取

 

此外,shell(這里指bash)的初始化過程是這樣的:

1.bash 檢查文件/etc/profile 是否存在

2. 如果存在,bash 就讀取該文件,否則,跳過

3.bash 檢查主目錄下的文件.bash_profile 是否存在。

4. 如果存在,bash 就讀取該文件,否則,跳過

5.bash 檢查主目錄下的.bash_login 是否存在。

6. 如果存在,bash 就讀取該文件,否則,跳過

7.bash 檢查主目錄下的文件.profile 是否存在

8. 如果存在, bash 就讀取該文件,否則,跳過。

這些步驟都執行完后,就出現提示符了, ksh 默認提示符是 $.

五:常見的shell變量

PATH 這個變量包含了一系列由冒號分隔開的目錄,系統就從這些目錄里尋找可執行文件。如果你輸入的可執行文件(例如ls、rc-update或者emerge) 不在這些目錄中,系統就無法執行它(除非你輸入這個命令的完整路徑,如/bin/ls)。  
ROOTPATH 這個變量的功能和PATH相同,但它只羅列出超級用戶(root)鍵入命令時所需檢查的目錄。  
LDPATH 這個變量包含了一系列用冒號隔開的目錄,動態鏈接器將在這些目錄里查找庫文件。 
MANPATH 這個變量包含了一系列用冒號隔開的目錄,命令man會在這些目錄里搜索man頁面。  
INFODIR 這個變量包含了一系列用冒號隔開的目錄,命令info將在這些目錄里搜索info頁面。  
PAGER 這個變量包含了瀏覽文件內容的程序的路徑(例如less或者more)。  
EDITOR 這個變量包含了修改文件內容的程序(文件編輯器)的路徑(比如nano或者vi)。  
KDEDIRS 這個變量包含了一系列用冒號隔開的目錄,里面放的是KDE相關的資料。 
CONFIG_PROTECT 這個變量包含了一系列用空格隔開的目錄,它們在更新的時候會被Portage保護起來。 
CONFIG_PROTECT_MASK 這個變量包含了一系列用空格隔開的目錄,它們在更新的時候不會被Portage保護起來。

PATH:決定了shell將到哪些目錄中尋找命令或程序
HOME:當前用戶主目錄
MAIL:是指當前用戶的郵件存放目錄。
SHELL:是指當前用戶用的是哪種Shell。
HISTSIZE:是指保存歷史命令記錄的條數
LOGNAME:是指當前用戶的登錄名。 
HOSTNAME:是指主機的名稱,許多應用程序如果要用到主機名的話,通常是從這個環境變量中來取得的。
LANG/LANGUGE:是和語言相關的環境變量,使用多種語言的用戶可以修改此環境變量。 
PS1:是基本提示符,對於root用戶是#,對於普通用戶是$。
PS2:是附屬提示符,默認是“>”。可以通過修改此環境變量來修改當前的命令符,比如下列命令會將提示符修改成字符串“Hello,My NewPrompt :) ”。 
# PS1=" Hello,My NewPrompt :) "


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM