1、source命令用法:

source  FileName

作用:在当前

bash环境下读取并执行FileName中的命令。该filename文件可以无"执行权限"

注:该命令通常用命令“.”来替代。

如:source .bash_profile

. .bash_profile两者等效。

source(或点)命令通常用于重新执行刚修改的初始化文档。

source命令(从 C Shell 而来)是bash shell的内置命令。

点命令,就是个点符号,(从Bourne Shell而来)。

source的程序主体是bash,脚本中的$0变量的值是bash,而且由于作用于当前bash环境,脚本中set的变量将直接起效

2、 sh, bash的命令用法:

sh/bash FileName

作用:打开一个子shell来读取并执行FileName中命令。该filename文件可以无"执行权限"

注:运行一个shell脚本时会启动另一个命令解释器.

每个shell脚本有效地运行在父shell(parent shell)的一个子进程里.

这个父shell是指在一个控制终端或在一个xterm窗口中给你命令指示符的进程.

shell脚本也可以启动他自已的子进程.

这些子shell(即子进程)使脚本并行地,有效率地地同时运行脚本内的多个子任务.

在ubuntu中sh只是bash的一个链接。

由于是在子shell中执行,脚本设置的变量不会影响当前shell。

3、./的命令用法:

./FileName

作用:打开一个子shell来读取并执行FileName中命令。该filename文件需要"执行权限"

注:运行一个shell脚本时会启动另一个命令解释器.

每个shell脚本有效地运行在父shell(parent shell)的一个子进程里.

这个父shell是指在一个控制终端或在一个xterm窗口中给你命令指示符的进程.

shell脚本也可以启动他自已的子进程.

这些子shell(即子进程)使脚本并行地,有效率地地同时运行脚本内的多个子任务.

由于是在子shell中执行,脚本设置的变量不会影响当前shell。

exec和source都属于bash内部命令(builtins  commands),在bash下输入man exec或man source可以查看所有的内部命令信息。

bash  shell的命令分为两类:外部命令和内部命令。外部命令是通过系统调用或独立的程序实现的,如sed、awk等等。内部命令是由特殊的文件格式(.def)所实现,如cd、history、exec等等。

在说明exe和source的区别之前,先说明一下fork的概念。

fork是linux的系统调用,用来创建子进程(child process)。子进程是父进程(parent  process)的一个副本,从父进程那里获得一定的资源分配以及继承父进程的环境。子进程与父进程唯一不同的地方在于pid(process id)。

环境变量(传给子进程的变量,遗传性是本地变量和环境变量的根本区别)只能单向从父进程传给子进程。不管子进程的环境变量如何变化,都不会影响父进程的环境变量。

shell script: 有两种方法执行shell scripts,一种是新产生一个shell,然后执行相应的shell  scripts;一种是在当前shell下执行,不再启用其他shell。

新产生一个shell然后再执行scripts的方法是在scripts文件开头加入以下语句

#!/bin/sh

一般的script文件(.sh)即是这种用法。这种方法先启用新的sub-shell(新的子进程),然后在其下执行命令。

另外一种方法就是上面说过的source命令,不再产生新的shell,而在当前shell下执行一切命令。

source:

source命令即点(.)命令。

在bash下输入man source,找到source命令解释处,可以看到解释"Read and execute commands from  filename in the current shell environment and  ..."。从中可以知道,source命令是在当前进程中执行参数文件中的各个命令,而不是另起子进程(或sub-shell)。

exec:

在bash下输入man exec,找到exec命令解释处,可以看到有"No new process is  created."这样的解释,这就是说exec命令不产生新的子进程。那么exec与source的区别是什么呢? exec命令在执行时会把当前的shell  process关闭,然后换到后面的命令继续执行。

* fork ( /directory/script.sh)

fork是最普通的,  就是直接在脚本里面用/directory/script.sh来调用script.sh这个脚本.运行的时候开一个sub-shell执行调用的脚本,sub-shell执行的时候,  parent-shell还在。sub-shell执行完毕后返回parent-shell.  sub-shell从parent-shell继承环境变量.但是sub-shell中的环境变量不会带回parent-shell

* source  (source /directory/script.sh)

与fork的区别是不新开一个sub-shell来执行被调用的脚本,而是在同一个shell中执行. 所以被调用的脚本中声明的变量和环境变量,  都可以在主脚本中得到和使用.

* exec (exec /directory/script.sh)

exec与fork不同,不需要新开一个sub-shell来执行被调用的脚本. 被调用的脚本与父脚本在同一个shell内执行。但是使用exec调用一个新脚本以后,  父脚本中exec行之后的内容就不会再执行了。这是exec和source的区别。

Linux JAVA执行source,linux 下source、sh、bash、./执行脚本的区别相关推荐

  1. Linux java集成安装环境,Linux下Java环境安装

    本节主要讲解Linux(Centos 6.5)下Java环境的安装 1. 卸载机器上默认安装的JDK 在Linux环境下一般会默认安装jdk,为了自己项目的开发部署,一般情况要重新装jdk,而且自己装 ...

  2. linux java tar 卸载_linux下jdk的卸载与安装

    JDK的卸载 1.检查jdk的是否安装,显示如下表示安装: [root@localhost ~]# rpm -aq|grep java tzdata-java-2010l-1.el6.noarch j ...

  3. emacs Linux Java编程环境_Linux下搭建用emacs查看代码的开发环境

    在windows下面我们有source in sight可以方便的浏览大工程中的代码,切换到linux环境下开发时,我们也可以搭建一个这样的环境.下面的内容将介绍如何搭建这样一个开发环境(这里我们假设 ...

  4. linux java mysql 备份 runtime_Linux下mysql定时备份脚本以及java实现

    sh脚本介绍 #!/bin/bash ####################################################### # crontab 定时备份########### ...

  5. linux java mysql 乱码_Linux下MySQL的字符集乱码问题总结

    前言: 字符集就是一套文字符号及其编码比较规则的集合.MySQL数据库字符集包括字符集(CHARACTER)和校对规则(COLLATION)两个概念.其中,字符集用来定义MySQL数据字符串的存储方式 ...

  6. linux java读取文件夹下文件名,Java获取Linux上指定文件夹下所有第一级子文件夹...

    说明:需要只获得第一级文件夹目录 package com.sunsheen.jfids.studio.monitor.utils; import java.io.BufferedReader; imp ...

  7. 怎么看linux Java版本,查看linux的java版本信息

    查看linux的java版本信息 [2021-02-10 01:02:40]  简介: linux系统查看jdk版本的方法是:可以通过[java -version]命令来查看.具体方法是:1.打开终端 ...

  8. ubuntu 下通过 sh 命令运行脚本产生如下错误:[: y: unexpected operator

    今天同事在打包 deb 时发生了如下错误: [: y: unexpected operator 脚本代码如下: read -p " Make Release Version [y/n]:&q ...

  9. 服务器脚本执行sql文件命令行,sh命令执行sql脚本

    sh命令执行sql脚本 内容精选 换一换 GAUSS-51400 : "Failed to execute the command: %s."SQLSTATE: 无错误原因: 执行 ...

  10. linux下用.sh文件执行python命令

    标准版 假设,在终端要执行的命令是: python main.py 首先在执行目录下创建test.sh(文件名自定义)文件 并在test.sh文件中写入: python main.py 保存. === ...

最新文章

  1. 组装计算机的游戏,如何组装一台游戏电脑
  2. OGNL是Object-Graph Navigation Language
  3. 使用权值衰减算法解决神经网络过拟合问题、python实现
  4. macos模拟器_苹果芯补完计划,iOS终将回归mac OS?
  5. python+selenium笔记(一):元素定位方法
  6. 记一次小程序自定义导航栏及加载动画的解决方案
  7. centos7下cups + samba共打印服务的教程
  8. Java异常的正确使用姿势
  9. 我的2017——求职篇(一)
  10. MySql常用SQL语句
  11. java 中文 语义分析,了解Javac编译器 - xinlan1964的个人页面 - OSCHINA - 中文开源技术交流社区...
  12. Java制作银行管理系统_java代码实现银行管理系统
  13. 如何让电脑的时间显示到秒
  14. 微信小程序 绑定手机号获取验证码
  15. 苹果电脑怎么登录邮件服务器,Mac系统中的邮箱怎么创建126邮箱帐户?
  16. Springboot+easyUI filebox实现单个文件上传
  17. SQLServer的top 100 percent用法
  18. 文献笔记|Lau, 2021, Nature human behaviour
  19. TiFlink: 使用 TiKV 和 Flink 实现强一致的物化视图
  20. 学了这么久python,不会连自己啥python版本都不知道吧?

热门文章

  1. 【NOI2008】【BZOJ1061】志愿者招募
  2. 基于Jrtplib的流媒体技术解析
  3. Linux 日志输出控制
  4. matplotlib 绘图技巧(一)
  5. 精彩英语吵架100句
  6. Linux Kernel Utilization Clamping简介
  7. 蓝牙小知识-决定蓝牙传输范围的三项关键因素
  8. iOS使用一些特殊键盘时的运行错误解决Can't find keyplane that supports type 4 for keyboard
  9. Android位置框架之GPS精度顺藤摸瓜
  10. SqlYong连接MySql数据时,出现错误代码2003的解决方法