source test.sh 、. test.sh、sh test.sh、./test.sh有什么区别

假设当前目录下面有一个可执行文件test.sh(就是chmod +x test.sh之后的文件)使用三种执行方法有什么问题呢?下面给出结论

  1. ./test.shsh test.sh
    两个写法表示的是同一个意思, ./test.sh前面的.是因为当前目录没有在环境变量PATH中,这两个方法都是重新建立一个子shell,然后在子shell中运行脚本test.sh,由于重新创建了子shell,在test.sh中的变量值在当前的shell中也无法找到(因为子shell新建的、改变的变量不会带回到父shell)
  2. 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的进程“中可以使用的变量.

实验

  1. 对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
  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有什么区别相关推荐

  1. linux tomcat startup.sh,tomcat启动脚本startup.sh分析

    一.分析说明 为了写出更加完善的tomcat启动方面的自动化脚本,健壮自己用于代码上线自动化部署的脚本,特分析下tomcat的bin目录下的starup.sh脚本,学习标准的sh脚本的编写方法,从中吸 ...

  2. lispbox 安装运行.sh的时候出现 lispbox.sh: 2: lispbox.sh: Bad substitution

    安装lispbox时使用tar命令将压缩文件解压之后cd进入之后在运行.sh文件时出现了如下情况. $ sh lispbox.sh lispbox.sh: 2: lispbox.sh: Bad sub ...

  3. Linux ubuntu终端sh、bash、shell的联系与区别

    终端是一个在窗口中绘制文本的程序,它会在屏幕上显示输出,也能让你通过键盘输入内容.准确讲,应该被称为「终端模拟器」,是对早年老式终端机的一种模拟程序.终端本身并不知道如何处理你的输入内容,它只是把你输 ...

  4. Linux crontab的使用方式,sh脚本的编写,sh脚本自动启动tomcat服务器,sh监控系统运行情况

    1.如果想使用Linux crontab(类似java quartz),需要先启动crontab.关于crontab的启动.关闭.重启.重新载入配置的方式如下: /sbin/service crond ...

  5. oracle账户用root权限执行sh,安装Oracle执行orainstRoot.sh与root.sh作用

    [root@gnd-dataguard oraInventory]# sh orainstRoot.sh Changing permissions of /u01/product/oraInvento ...

  6. java调用.sh文件_java 调用cmd/sh文件

    最近在做产品遇到java在windows下面调用bat脚本和在linux下调用shell脚本,现在记录一下以便以后查阅. 首先贴出RuntimeUtils工具类,此类简化了 Runtime中exec的 ...

  7. Linux中运行.sh脚本,异常/bin/sh^M: bad interpreter: No such file or directory。

    这是不同系统编码格式引起的:在windows系统中编辑的.sh文件可能有不可见字符,所以在Linux系统下运行会报以上异常信息. 解决办法 sed -i "s/\r//" test ...

  8. shell命令sh、dash、bash、rbash的区别

    1.查看当前系统支持的shell类型 $ cat /etc/shells # /etc/shells: valid login shells /bin/sh /bin/dash /bin/bash / ...

  9. linux启动sh文件命令,Linux 运行 .sh 文件的两种方法

    Linux 运行 .sh 文件的两种方法 文章作者:网友投稿 发布时间:2010-06-15 13:31:16 来源:网络 一个中等水平的Linux用户一定少不了经常执行.sh文件,当然了,你可以在图 ...

  10. linux shell bin sh,linux shell中#bin/sh的理解

    摘要 腾兴网为您分享:linux shell中#bin/sh的理解,支付旭尊,小熊到家,天天美剧,淘金宝等软件知识,以及维棠flv视频软件,usb抓包工具,红警2无敌,ucbug造梦西游4,壁纸工作室 ...

最新文章

  1. linux/Docker
  2. linux centos yum错误 You could try using --skip-broken to work around the problem
  3. 二级指针读取文件(显示行数、读取、释放内存)
  4. 博客园里如何防垃圾评论
  5. linux 多个select,Linux select()和多个套接字的FIFO排序?
  6. ethtool源码分析
  7. oracle会计事件,新的一年打开会计期发生错误
  8. 【毕业设计】java银行帐目管理系统(源代码+论文)
  9. Python 爬虫 —— BeautifulSoup
  10. 蓝桥杯试题java_java蓝桥杯试题
  11. OpenCL入门程序
  12. 解决idea导入项目中文乱码intellij
  13. macOS制作Linux启动U盘,如何在Mac OS下用ISO包制作启动U盘
  14. matlab int积分常数,matlab int 积分
  15. 【MySQL学习笔记】电子杂志订阅表的操作
  16. Java 学习之路(二十)- 认识数组和变量
  17. 我家乡的春夏(原创)
  18. 按键1按下数码管显示1,按键2按下数码管显示2,按键3按下8个LED灯实现流水灯效果;
  19. python读取数据出现UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc8 in position 0: invalid contin
  20. Tensorflow pb模型转uff模型方法及遇到KeyError20和expected Const问题解决

热门文章

  1. 关于Python爬虫常见的面试题
  2. java架构中:亿级用户中心的设计与实践
  3. 运行时 Entry name .... .. collided
  4. translate maketrans 方法详解
  5. CVPR2019 | 论文分类汇总(190611 更新)
  6. 如何制作PE系统盘?
  7. 如何在Windows下使用DOS命令进入MySQL数据库?
  8. MySQL中统计函数的使用
  9. 利用Reachability判断网络环境(WAN/WIFI)
  10. html 淡入淡出效果,css3 transition实现淡入淡出效果 - 小俊学习网