免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2195 | 回复: 5
打印 上一主题 下一主题

[系统管理] [结贴]set设置的环境变量,似乎是当前shell的而不是全局的? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-05-06 10:39 |只看该作者 |倒序浏览
本帖最后由 wqrocdr 于 2015-05-07 09:09 编辑

例如,我登录到bash里面,然后我再进一层bash:

  1. bash
  2. :~$ set a=2
  3. :~$ exit
  4. exit
  5. :~$ echo $a

  6. :~$
复制代码
我的理解是: 用set命令定义一个变量,这个变量就成为环境变量了,环境变量是全局的吧? 但是从我的实验看起来,环境变量只是当前shell以及它的子shell里面有效。
那么这个和普通的变量声明a=2有什么区别呢? 变量的作用域和生命周期都是一样的啊,那么环境变量和普通变量的区别只是用env命令能否看见?

论坛徽章:
0
2 [报告]
发表于 2015-05-06 13:56 |只看该作者
set或者export出来的环境变量都只在本会话有效,本会话退出后即失效。不管是UNIX还是LINUX或者WINDOWS都是如此。

要让环境变量在退出会话后依然有效,则需要在用户登录的profile里添加此环境变量的声明,或者在系统级别的参数中设置此环境变量

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
3 [报告]
发表于 2015-05-06 14:17 |只看该作者
Windows是把环境变量的定义放在注册表里面
Linux是把环境变量的定义放在 /etc/profile 或者用户自己的 login profile 里面

论坛徽章:
0
4 [报告]
发表于 2015-05-06 17:23 |只看该作者
bedba 发表于 2015-05-06 13:56
set或者export出来的环境变量都只在本会话有效,本会话退出后即失效。不管是UNIX还是LINUX或者WINDOWS都是如 ...


那set和export的本质区别在哪里呢?

求职 : Linux运维
论坛徽章:
203
拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:57:092015小元宵徽章
日期:2015-03-06 15:58:182015年亚洲杯之约旦
日期:2015-04-05 20:08:292015年亚洲杯之澳大利亚
日期:2015-04-09 09:25:552015年亚洲杯之约旦
日期:2015-04-10 17:34:102015年亚洲杯之巴勒斯坦
日期:2015-04-10 17:35:342015年亚洲杯之日本
日期:2015-04-16 16:28:552015年亚洲杯纪念徽章
日期:2015-04-27 23:29:17操作系统版块每日发帖之星
日期:2015-06-06 22:20:00操作系统版块每日发帖之星
日期:2015-06-09 22:20:00
5 [报告]
发表于 2015-05-06 23:35 |只看该作者
本帖最后由 lyhabc 于 2015-05-06 23:38 编辑

系统环境变量
env
set  自定义变量也可以查
unset
export 定义全局变量



打印当前用户内置变量 用户不同 变量不同
env

所有变量全部列出来 不管有没有声明都可以列出来
set

声明(全局变量 )在子shell生效  全局生效 需要export一下
export a=1

bash开一个子shell

env 就可以看到a=1 ,因为a是全局变量


系统所有用户使用变量: export myname=Aming  全局变量,加入/etc/profile并source /etc/profile永久生效
系统某个用户使用变量: export myname=Aming 加入当前用户家目录下的 .bashrc中 source .bashrc
export myname=Aming  全局变量,export 不加任何选项表示,声明所有的环境变量以及用户自定义变量


env 可以列出当前用户的所有环境变量以及用户自定义全局变量
set命令可以把所有变量列出来包括系统的和自定义的全局变量以及当前shell自定义变量

set 和export
set 正如其名,他只是set一下,范围不是全局的,他没有声明的意思
export 他是声明的意思,所以他在可以全局声明,而set做不到

论坛徽章:
0
6 [报告]
发表于 2015-05-07 08:23 |只看该作者
回复 4# wqrocdr


    可参考五楼的。

另外,不太赞同五楼的全局或者非全局的说法,我的本意是set和export的使用不同,例如set可以在windows或者csh下设置,export可以在bash、sh、ksh等环境下设置
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP