source test.sh、sh test.sh、./test.sh有什么区别
source test.sh 、. test.sh、sh test.sh、./test.sh有什么区别
假设当前目录下面有一个可执行文件test.sh
(就是chmod +x test.sh之后的文件)使用三种执行方法有什么问题呢?下面给出结论
./test.sh
和sh test.sh
两个写法表示的是同一个意思,./test.sh
前面的.
是因为当前目录没有在环境变量PATH中,这两个方法都是重新建立一个子shell,然后在子shell中运行脚本test.sh,由于重新创建了子shell,在test.sh中的变量值在当前的shell中也无法找到(因为子shell新建的、改变的变量不会带回到父shell)source test.sh
和. test.sh
注意,这里命令. test,sh
和上文说到的./test.sh
差了一个/
,source test.sh
和. test.sh
两个命令也是一样的,source
也叫点命令,也就是说他可以被视为一个.
这个命令的作用就是在当前的shell中运行test.sh,而不是新建一个子shell,也就是说这样的话,test.sh执行结束后test.sh中的一些值在当前的shell也可以看见,所以有些时候当我修改了/etc/profile文件,我想让它立刻生效,而不用重新登录;这时就想到用source命令,如:source /etc/profile 或者 . /etc/profile
补充:export和环境变量
export可用于产生环境变量,环境变量的作用就是在“当前shell“、”当前shell的子shell“、”shell和子shell的进程“中可以使用的变量.
实验
- 对source test.sh和sh test.sh的区别
(base) skt1faker@SKT1Faker:~$ cat test.sh
var_export=100
export var_export
var=1
(base) skt1faker@SKT1Faker:~$ sh test.sh
(base) skt1faker@SKT1Faker:~$ echo ${var}(base) skt1faker@SKT1Faker:~$ echo ${var_export}(base) skt1faker@SKT1Faker:~$ source test.sh
(base) skt1faker@SKT1Faker:~$ echo "var_export = ${var_export} var = ${var}"
var_export = 100 var = 1
- 观察export的作用(这部分和本文无关是我补充的)
(base) skt1faker@SKT1Faker:~$ . test.sh
(base) skt1faker@SKT1Faker:~$ bash
(base) skt1faker@SKT1Faker:~$ cat test.sh
var_export=100
export var_export
var=1
(base) skt1faker@SKT1Faker:~$ echo ${var} # 注意这里没有显示是因为我运行了bash语句,这样进入了子shell,var没有办法传入子shell,但是环境变量会传入子shell(base) skt1faker@SKT1Faker:~$ echo ${var_export}
100
参考脚本之家的一篇文章
source test.sh、sh test.sh、./test.sh有什么区别相关推荐
- linux tomcat startup.sh,tomcat启动脚本startup.sh分析
一.分析说明 为了写出更加完善的tomcat启动方面的自动化脚本,健壮自己用于代码上线自动化部署的脚本,特分析下tomcat的bin目录下的starup.sh脚本,学习标准的sh脚本的编写方法,从中吸 ...
- lispbox 安装运行.sh的时候出现 lispbox.sh: 2: lispbox.sh: Bad substitution
安装lispbox时使用tar命令将压缩文件解压之后cd进入之后在运行.sh文件时出现了如下情况. $ sh lispbox.sh lispbox.sh: 2: lispbox.sh: Bad sub ...
- Linux ubuntu终端sh、bash、shell的联系与区别
终端是一个在窗口中绘制文本的程序,它会在屏幕上显示输出,也能让你通过键盘输入内容.准确讲,应该被称为「终端模拟器」,是对早年老式终端机的一种模拟程序.终端本身并不知道如何处理你的输入内容,它只是把你输 ...
- Linux crontab的使用方式,sh脚本的编写,sh脚本自动启动tomcat服务器,sh监控系统运行情况
1.如果想使用Linux crontab(类似java quartz),需要先启动crontab.关于crontab的启动.关闭.重启.重新载入配置的方式如下: /sbin/service crond ...
- oracle账户用root权限执行sh,安装Oracle执行orainstRoot.sh与root.sh作用
[root@gnd-dataguard oraInventory]# sh orainstRoot.sh Changing permissions of /u01/product/oraInvento ...
- java调用.sh文件_java 调用cmd/sh文件
最近在做产品遇到java在windows下面调用bat脚本和在linux下调用shell脚本,现在记录一下以便以后查阅. 首先贴出RuntimeUtils工具类,此类简化了 Runtime中exec的 ...
- Linux中运行.sh脚本,异常/bin/sh^M: bad interpreter: No such file or directory。
这是不同系统编码格式引起的:在windows系统中编辑的.sh文件可能有不可见字符,所以在Linux系统下运行会报以上异常信息. 解决办法 sed -i "s/\r//" test ...
- shell命令sh、dash、bash、rbash的区别
1.查看当前系统支持的shell类型 $ cat /etc/shells # /etc/shells: valid login shells /bin/sh /bin/dash /bin/bash / ...
- linux启动sh文件命令,Linux 运行 .sh 文件的两种方法
Linux 运行 .sh 文件的两种方法 文章作者:网友投稿 发布时间:2010-06-15 13:31:16 来源:网络 一个中等水平的Linux用户一定少不了经常执行.sh文件,当然了,你可以在图 ...
- linux shell bin sh,linux shell中#bin/sh的理解
摘要 腾兴网为您分享:linux shell中#bin/sh的理解,支付旭尊,小熊到家,天天美剧,淘金宝等软件知识,以及维棠flv视频软件,usb抓包工具,红警2无敌,ucbug造梦西游4,壁纸工作室 ...
最新文章
- linux/Docker
- linux centos yum错误 You could try using --skip-broken to work around the problem
- 二级指针读取文件(显示行数、读取、释放内存)
- 博客园里如何防垃圾评论
- linux 多个select,Linux select()和多个套接字的FIFO排序?
- ethtool源码分析
- oracle会计事件,新的一年打开会计期发生错误
- 【毕业设计】java银行帐目管理系统(源代码+论文)
- Python 爬虫 —— BeautifulSoup
- 蓝桥杯试题java_java蓝桥杯试题
- OpenCL入门程序
- 解决idea导入项目中文乱码intellij
- macOS制作Linux启动U盘,如何在Mac OS下用ISO包制作启动U盘
- matlab int积分常数,matlab int 积分
- 【MySQL学习笔记】电子杂志订阅表的操作
- Java 学习之路(二十)- 认识数组和变量
- 我家乡的春夏(原创)
- 按键1按下数码管显示1,按键2按下数码管显示2,按键3按下8个LED灯实现流水灯效果;
- python读取数据出现UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc8 in position 0: invalid contin
- Tensorflow pb模型转uff模型方法及遇到KeyError20和expected Const问题解决
热门文章
- 关于Python爬虫常见的面试题
- java架构中:亿级用户中心的设计与实践
- 运行时 Entry name .... .. collided
- translate maketrans 方法详解
- CVPR2019 | 论文分类汇总(190611 更新)
- 如何制作PE系统盘?
- 如何在Windows下使用DOS命令进入MySQL数据库?
- MySQL中统计函数的使用
- 利用Reachability判断网络环境(WAN/WIFI)
- html 淡入淡出效果,css3 transition实现淡入淡出效果 - 小俊学习网