今天用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 :) "

set和setenv的更多相关文章

  1. setenv.bat

    @echo off rem Licensed to the Apache Software Foundation (ASF) under one or more rem contributor lic ...

  2. 解决:未找到setenv命令

    在Ubuntu12.04中配置python环境变量:setenv PATH "$PATH:/usr/local/bin/python",提示未找到setenv命令. 为什么呢?这是 ...

  3. apache SetEnv 设置

    php的服务器预定义变量 $_SERVER 可以通过apache的mod_env模块来添加我们所需要的内容 来段官网介绍 Description: Modifies the environment w ...

  4. setenv 和 set

    setenv 和 set 是在csh系列的命令,当然bash中也有set,还是有出入的.   set 是对当前进程有效,不会传递给子进程 setenv 不仅对当前进程有效,也会传递给子进程.   语法 ...

  5. 环境变量篇getenv putenv setenv

    getenv(取得环境变量内容) 相关函数 putenv,setenv,unsetenv 表头文件 #include<stdlib.h> 定义函数 char * getenv(const ...

  6. linux之getenv putenv setenv和unsetenv详解

    1.getenv函数 头文件:#include<stdlib.h> 函数原型: char * getenv(const char* name); 函数说明:getenv()用来取得参数na ...

  7. /data/tomcat8/bin/setenv.sh

    --问题 Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=512m; support was remove ...

  8. [置顶] getenv、setenv函数(获取和设置系统环境变量) 与 环境变量

    1.getenv() 函数名: getenv 功 能: 从环境中取字符串,获取环境变量的值 头文件: stdlib.h 用 法:char *getenv(char *envvar); 函数说明:get ...

  9. setenv LD_LIBRARY_PATH

    For most Linux binaries, NCL was built using gcc and gfortran. This may cause a dependency on a file ...

  10. export setenv

    bash export LD_LIBRARY_PATH="../third_party/lib:$LD_LIBRARY_PATH" csh setenv LD_LIBRARY_PA ...

随机推荐

  1. Zuul的应用

    一.介绍 注:Zuul中默认就已经集成了Ribbon负载均衡和Hystix熔断机制.但是所有的超时策略都是走的默认值,比如熔断超时时间只有1S,很容易就触发了. 二.依赖 <dependency ...

  2. UVA 10815 Andy's First Dictionary (C++ STL map && set )

    原题链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_proble ...

  3. SQL安全执行

    begin tran begin -----------执行SQL开始----------------- update Audioset Name =3 -----------执行SQL结束----- ...

  4. 深入理解http1.x、http 2和https

    转自 https://segmentfault.com/a/1190000015316332 一.HTTP/1.x Http1.x 缺陷:线程阻塞,在同一时间,同一域名的请求有一定数量限制,超过限制数 ...

  5. 浅析DOM 与 html ,xml。

    DOM= Document Object Model,文档对象模型,DOM可以以一种独立于平台和语言的方式访问和修改一个文档的内容和结构.是表示和处理一个HTML或XML文档的常用方法. DOM定义了 ...

  6. 搭建服务器之www-向外提供视频服务by html5 video标签

    搭建好www服务器,主要目的有两个一个是试验下,另一个是想给女朋友个惊喜,给她个带视频的网页,嘿嘿当前测试下相应功能. 1,采用html5的视频功能:bideo标签. 源码如下: <!docty ...

  7. ☕【Java深层系列】「并发编程系列」让我们一起探索一下CyclicBarrier的技术原理和源码分析

    CyclicBarrier和CountDownLatch CyclicBarrier和CountDownLatch 都位于java.util.concurrent这个包下,其工作原理的核心要点: Cy ...

  8. linux文件详细说明与inode编号

    目录 一:文件类型概念说明 1.文件详细信息详解 2.inode编号 一:文件类型概念说明 1.文件详细信息详解 文件详细信息编号 ls - lhi /etc/ 134319695 -rw------ ...

  9. asp.net core监控—引入Prometheus(三)

    上一篇博文中说到Prometheus有四种指标类型:Counter(计数器).Gauge(仪表盘).Histogram(直方图).Summary(摘要),并且我们做了一个Counter的Demo,接下 ...

  10. WebAssembly环境搭建

    Environment:Ubuntu 16.06 + emscripten URL: https://emscripten.org/docs/getting_started/downloads.htm ...