linux下csh设置环境变量有两种方式set 和 setenv
一、区别
(1)setenv是csh的命令; 在bash中是没有setenv的
(2)csh/tcsh有两种类型的变量:局部变量和环境变量.
局域变量是在shell内部声明的;环境变量是全局域的变量.
使用set来定义局部变量, 使用setenv可以定义环境变量;
局部变量只对本shell有效, 不能传递给子shell;
但环境变量可传递给子shell. setenv有点类似于bash中export一个变量.
(3)当然, set 和setenv的语法不一样
# set varname = value;
# setenv varname2 valu2;
二、配置环境变量
bash的shell默认用户下面的配置文件是:.bashrc。用户登陆之后,默认执行该配置文件内容,让环境变量生效
csh的shell默认用户下面的配置文件是:.cshrc。 用户登陆之后,默认执行该配置文件内容,让环境变量生效(如果把用户的shell从bash改成csh之后,目录下的配置文件还是.bashrc,用户可以自己新建一个.cshrc来配合csh的使用。配置文件弄完后,可以执行source .cshrc生效)
三、set 和 setenv区别示例
[root@ctm9018 ~]# useradd test1 -s /bin/csh #新建用户test1,shell为csh
[root@ctm9018 ~]# useradd test2 -s /bin/csh #新建用户test2,shell为csh
[root@ctm9018 ~]# su - test1 #切换到用户test1
[test1@ctm9018 ~]$ set var1=123 #使用set给var1设置变量
[test1@ctm9018 ~]$ setenv var2 456 #使用setenv给var2设置变量
[test1@ctm9018 ~]$ su test2 #从test1用户切换到test2用户,注意切换的时候使用su,不要使用su -,如果使用su - 就不是上一个shell的子shell了
[test2@ctm9018 test1]$ echo $var1 #set设置的var1为局部变量,所以在子shell里边显示没有定义
var1: Undefined variable.
[test2@ctm9018 test1]$ echo $var2 #setenv设置的var2为全局变量,所以在子shell里边可以看到var2的值
456