执行脚本后脚本内声明的变量无效
来源:互联网 发布:销售网络地图代码 编辑:程序博客网 时间:2024/04/29 04:09
问题
对shell和脚本理解不清楚的同学,在使用一些SDK时,有时需要执行某些脚本,初始化环境配置,但有时会出现执行脚本后,脚本内声明的环境变量仍为空的情况。如果这个时候去调用SDK会出现一些奇怪的错误,一些sdk会报错。
处理方式
其实原因是, 执行脚本时以 ./srcipt.sh
形式执行,这种情况下,执行shell是在一个子shell里运行的,所以执行后,结果并没有反应到父shell里, 而用source script.sh
则不存在此问题。
解释
LINUX中一个文件是根据其是否具有执行属性来判断他是否可以直接运行的。如果我们要执行某一个文件,可以先将其权限修改为可执行。然后通过用sh来执行该脚本或者./脚本名。
但有时候我们并不想修改文件权限,可能我们也没有那个权限,所以我们可以使用.(点号)+文件名来临时执行一个脚本而无须修改权限。
在Linux系统中存在大量的脚本,其中你会看到大量这个用source命令(从 C Shell 而来)执行bash shell的内置命令。点命令,就是个点符号(从Bourne Shell而来)是source的另一名称。同样的,当前脚本中配置的变量也将作为脚本的环境,source(或点)命令通常用于重新执行刚修改的初始化文档,如 .bash_profile 和 .profile 等等。例如,假如在登录后,对.bash_profile中的 EDITER 和 TERM 变量做了修改,则能够用source命令重新执行.bash_profile中的命令而不用注销并重新登录。
source命令的作用就是用来执行一个脚本,那么: source a.sh 同直接执行 ./a.sh 有什么不同呢?比如您在一个脚本里export $KKK=111
,假如您用./a.sh执行该脚本,执行完毕后,您运行echo $KKK,发现没有值,假如您用source来执行,然后再echo ,就会发现KKK=111。因为调用./a.sh来执行shell是在一个子shell里运行的,所以执行后,结果并没有反应到父shell里,但是source不同他就是在本shell中执行的,所以能够看到结果。
test.sh中第一行一定是 “#! /bin/bash” 它代表的意思是,该文件使用的是bash语法。如果不设置该行,那么你的shell脚本就不能被执行。
- 执行脚本后脚本内声明的变量无效
- 利用TortoiseGit将shell脚本文件从远端Gitlib库克隆到本地后脚本无法执行
- SQL函数内游标变量声明与执行顺序
- 执行innerHTML内的脚本
- 本BLOG内所有文章的版权声明
- shell脚本变量执行
- 本BLOG的声明
- rman备份数据库后脚本不能自动退出
- 微信坚硬的后脚跟
- 微信坚硬的后脚跟
- HTML 内嵌脚本执行
- 初始化列表的初始化变量顺序是根据成员变量的声明顺序来执行的
- 脚本Remove Google Results Redirect在更改本机host导致无效的解决办法
- CUDA的执行配置与内建变量
- javscript函数内变量声明提前
- 在shell脚本中使用另一个脚本中声明的变量
- 记录shell脚本执行的流程及变量的值
- bat脚本中命令执行的结果赋值给变量
- python爬虫脚本下载YouTube视频
- Python进程间通信,使用multiprocessing.connection的Listener和Client实现
- 使用百度地图SDK定位当前位置并显示在地图上
- 英国智能机器人技术和自主系统研究发展概况
- 【项目管理】Jenkins+Maven+Git项目持续构建之搭建JDK/Maven基础环境
- 执行脚本后脚本内声明的变量无效
- 人机交互与智能的起源、本质
- 【1701H1】【穆晨】【171121】连续第四十二天总结
- 解决,当列表进入详情页的时候,操作完使用浏览器的返回,状态依然是之前的,需要手动刷新的问题
- Jmeter接口测试
- 10进制转16进制
- LoRaWAN地区参数更新至版本B,新增印度865频段
- bootstrap Table 隐藏表单属性,以及格式时间的写法
- MyEclipse中修改web项目名称