linux 变量的继承,solaris移植到linux的大坑:bash和sh中环境变量继承的差异
问题的引出
项目中脚本A 、B,A调用B,
其中A中所有命令均使用绝对路径,B中直接使用
在solaris上工作正常,移植到linux中报错:
/syscom/lm/linux//backupgen: line 60: mkdir: command not found
/syscom/lm/linux//backupgen: line 61: cd: /syscom//tmp/syscom_dir: No such file or directory
/syscom/lm/linux//backupgen: line 62: mkdir: command not found
没有找到cd、mkidr等命令,很明显是PATH变量设置错误了。
很快定位到问题点,在A中设置了非法的PATH值:
PATH=/syscom/tmp
bash中环境变量的继承关系
在一般的理解中,bash和sh完全一样,原因就在于sh逐渐被废弃。
[jud@syscom]$ls -l /bin/sh
lrwxrwxrwx. 1 root root 4 Mar 18 2014 /bin/sh -> bash
在linux中sh是bash的链接,已经没有sh了。
测试bash中变量继承关系:
[jud@~]$TEST=a #设置自定义变量TEST值为a
[jud@~]$echo $TEST
a
[jud@~]$bash #进入子bash
[jud@~]$echo $TEST #打印TEST变量,值为空
[jud@~]$ echo $PATH #打印PATH变量的值
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/syscom/bin:/syscom/lm/linux:.
[jud@~]$ PATH=/tmp #设定PATH的值
[jud@~]$ echo $PATH
/tmp
[jud@~]$ bash #进入子bash,无法使用bash命令
-bash: bash: command not found
[jud@~]$ /bin/bash #必须用绝对路径才可以
bash: id: command not found
bash: id: command not found
[jud@~]$ echo $PATH #子bash继承了父bash的环境变量
/tmp
如果通过export命令将自定义变量 TEST变更为 环境变量:
[syscom@sysbase0-0 ~]$ export TEST=a
[syscom@sysbase0-0 ~]$ bash
[syscom@sysbase0-0 ~]$ echo $TEST
a
从以上的举例中可以看出来,bash中自定义变量是不能继承的,环境变量是继承的。
sh中环境变量继承关系
在古老的solaris上仍然使用着sh
> ls -l /sbin/sh
-r-xr-xr-x 1 root root 95492 9月 22日 2010年 /sbin/sh
> ls -l /usr/bin/bash
-r-xr-xr-x 1 root bin 795204 12月 24日 21:58 /usr/bin/bash
可见在solaris上bash与sh是两个不同的shell!
测试sh中的变量继承关系:
> sh
$ TEST=a #设置自定义变量TEST值为a
$ echo $TEST
a
$ sh #进入子sh
$ echo $TEST #打印TEST变量,值为空
$ echo $PATH #打印PATH变量的值
/usr/local/PGRUV05L23R1000_sol:.:/export/home/fnstli:/export/home/fnstli/bin:/usr/sbin:/usr/bin:/opt/SUNWspro/bin:/usr/ucb:/usr/etc:/usr/local/bin:/usr/ccs/bin:/usr/include:/etc/opt/FSUNiconv/bin:/usr/openwin/bin:/usr/X/bin:/usr/bin/X11:/usr/xwin/bin:/syscom-E11/lm/solaris:/syscom/tool:/syscom-E11/bin:/usr/sfw/bin:/opt/netbeans-5.5.1/bin:/usr/jdk/jdk1.5.0_16/bin:/usr/sfw/bin
$ PATH=/tmp #设定PATH的值
$ echo $PATH
/tmp
$ /sbin/sh #进入子sh
$ echo $PATH #子sh中的$PATH没有继承父sh的值!
/usr/local/PGRUV05L23R1000_sol:.:/export/home/fnstli:/export/home/fnstli/bin:/usr/sbin:/usr/bin:/opt/SUNWspro/bin:/usr/ucb:/usr/etc:/usr/local/bin:/usr/ccs/bin:/usr/include:/etc/opt/FSUNiconv/bin:/usr/openwin/bin:/usr/X/bin:/usr/bin/X11:/usr/xwin/bin:/syscom-E11/lm/solaris:/syscom/tool:/syscom-E11/bin:/usr/sfw/bin:/opt/netbeans-5.5.1/bin:/usr/jdk/jdk1.5.0_16/bin:/usr/sfw/bin
从以上的举例中可以看出来,sh中自定义变量是不能继承的,环境变量同样不能被继承!
总结
环境变量在sh和bash的继承规则并不相同。在solaris的脚本向linux平台移植时,需要特别注意solaris大多使用sh解释运行脚本!
linux 变量的继承,solaris移植到linux的大坑:bash和sh中环境变量继承的差异相关推荐
- 【Linux】《Linux命令行与shell脚本编程大全 (第4版) 》笔记-Chapter6-Linux 环境变量
六.Linux 环境变量 bash shell 使用环境变量来存储 shell 会话和工作环境的相关信息(这也是被称作环境变量的原因).环境变量允许在内存中存储数据, 以便 shell 中运行的程序或 ...
- Linux——孤儿进程|进程的优先级 用top命令去修改优先级 其他概念 环境变量 PATH 获取环境变量
目录 孤儿进程 进程的优先级 用top命令去修改优先级 其他概念 环境变量 PATH 获取环境变量 习题 孤儿进程 父进程如果提前退出,那么子进程后退出,进入Z之后,那该如何处理呢? 父进程先退出,子 ...
- bashrc文件中环境变量配置错误,导致linux命令无法正常使用的解决方案
分析原因 bashrc文件中环境变量配置错误,导致linux无法正常使用. 其实解决问题的方法很简单:把你在bashrc文件中写错的东西注释掉或者改写正确即可. 可是此时图形界面登陆不了,vim用不了 ...
- Linux中环境变量文件及配置
一.环境变量文件介绍 转自:http://www.cnblogs.com/mengyan/archive/2012/09/04/2669894.html Linux中环境变量包括系统级和用户级,系统级 ...
- Linux中环境变量的设置——setenv/export
Linux中环境变量的设置--setenv/export 环境变量 境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统 ...
- Linux中环境变量
目录 1.什么是环境变量 2.常见的一些环境变量: 2.1PATH: 2.2HOME: 2.3shell: 3.查看当前的环境变量 3.1env: 3.2echo $ [环境变量名称] 3.3在操作系 ...
- linux中d4B什么意思,Linux中环境变量文件及配置+++
Linux中环境变量文件及配置 一.环境变量文件介绍 转自:://http://www.doczj.com/doc/63e2b4bd482fb4daa48d4b53.html/cscmaker/art ...
- 《Linux就该这么学》培训笔记_ch03_管道符、重定向与环境变量
<Linux就该这么学>培训笔记_ch03_管道符.重定向与环境变量 <Linux就该这么学>培训笔记_ch03_管道符.重定向与环境变量 文章最后会post上书本的笔记照片. ...
- nodejs 获取系统环境变量_Node.js中环境变量process.env的一些事详解
前言 最近这两天在和运维GG搞部署项目的事儿.碰到一个问题就是,咱们的dev,uat,product环境的问题. 因为是前后端分离,所以在开发和部署的过程中会有对后端接口的域名的切换问题.折腾了一下午 ...
最新文章
- phpexecl保存mysql_【PHP】将数据库表保存为Excel(PHPExcel)
- mysql 登录_Spring boot redis +mysql实现登录功能
- C语言ODBC方式连接DM数据库
- Package ‘oniguruma’, required by ‘virtual:world’, not found
- class.sitemap.php
- 域服务器账号权限,域中文件服务器权限设置
- Python+Selenium+Edge浏览器安装与简单运行(1/2)
- 专家提醒 IE下JS编程中需注意内存释放问题
- Java可以加速播放的播放器,基于live555的rtsp播放器之十二:使用soundtouch加速音频播放...
- 第2关:比较、掩码和布尔逻辑
- 红米手机4A怎么样刷入开发版获得ROOT权限
- Android中View绘制各种状态的背景图片原理深入分析以及StateListDrawable使用
- Matplotlib绘制图片——膨胀算法
- 安恒6月赛部分做题记录
- dev-tool安装方法(手动安装版)
- 别克英朗18T用车感受(一)
- mysql 进制转换函数_SQL Server 进制转换函数
- springcloud:什么是分布式微服务,如何学习微服务(一)
- 计算机病毒论文百度百科,计算机病毒解析与防范论文.doc
- 十四款原创纯DOS(硬盘,软盘,光盘,闪盘,虚拟盘 通用)新版杀毒软件
热门文章
- Oracle GoldenGate 12c 新特性
- 各种囧然不同流行的编程风格
- [ app.json 文件内容错误] app.json: [“usingComponents“][“van-button“]: “@vant/weapp/button/index“ 未找到
- 每个前端工程师都应该去了解的前端面试题总结(一)
- CSS强制英文、中文换行与不换行
- OpenCV实战1——图像矫正技术
- 7-3 输出最大公约数 (10 分)
- linux查看历史的所有命令,linux查看历史命令history
- PAT乙级 1061 判断题
- 在函数中的局部程序(像是比局部变量还局部的部分)