执行脚本source 和 . 和sh 的区别是什么

"source"和"."的功能是一样的,可以调用脚本,并将脚本里的函数也传递到当前的脚本或者解释器中,即不会开启新的bash而是在当前bash中运行。
"sh"后面跟脚本名称,则不会将该脚本的函数传递进来,即需要开启新的bash,"sh"实际上是执行一个脚本,最后执行完毕会将内存释放掉,不会保存变量。
而"."和"source"则不会新的bash进程,这就是为什么在/etc/init.d/这个目录下有很多的脚本都会用"."去调用脚本。
综上所述:
生产环境中编写脚本一般会使用sh命令去执行脚本,因为使用sh命令执行的脚本执行完毕后会自动释放内存并不会影响当前进程中的变量。除非你明确直到想要脚本中的变量要在当前bash中生效(比如重新读取配置文件)则可以使用"source"或者"."

原文地址:https://www.cnblogs.com/betterquan/p/12397642.html

时间: 2024-09-30 07:04:03

执行脚本source 和 . 和sh 的区别是什么的相关文章

编写脚本标准的格式与执行脚本

编写脚本标准的格式: 第一行:#!/bin/bash  表示定义该脚本是一个shell脚本(固定格式) 第二行:#              这里的#属于注解,没有任何意义,shell 不会解析它. 第三行:#说明一下该脚本的作用 第四行:#写一下脚本的author(作者) 编写时间 第五行:写脚本内容 二三四行可有可无,建议养成好习惯. 要执行脚本(例如:first_shell.sh): (1)   加执行权限: chmod o+x first_shell.sh 运行脚本:./first_sh

ssh非交互式密码授权远程执行脚本

公司有上百台服务器,需要为每台服务器都执行一个脚本,因为所有服务器的账号密码都是一样的,所以可以不用搭建ansible等自动化运维工具,我们直接通过ssh远程执行即可完成 本文以三台服务器为例,系统版本:Centos7.3 1.安装sshpass cd /etc/yum.repos.d/ wgethttp://download.opensuse.org/repositories/home:Strahlex/CentOS_CentOS-6/home:Strahlex.repo yum instal

source、sh、bash、./执行脚本的区别

source.sh.bash../执行脚本的区别 source命令用法: source FileName 作用:在当前bash环境下读取并执行FileName中的命令.该filename文件可以无"执行权限" 注:该命令通常用命令"."来替代. 如:source .bash_profile . .bash_profile两者等效. source(或点)命令通常用于重新执行刚修改的初始化文档. source命令(从 C Shell 而来)是bash shell的内置命

详解shell中source、sh、bash、./执行脚本的区别

复制文章:https://www.jb51.net/article/128918.htm 这篇文章主要介绍了shell中source.sh.bash../执行脚本的区别,需要的朋友可以参考下 1.source命令用法: source FileName 作用:在当前bash环境下读取并执行FileName中的命令.该filename文件可以无"执行权限" 注:该命令通常用命令“.”来替代. 如:source .bash_profile . .bash_profile两者等效. sourc

linux:执行脚本出现/bin/sh^M: bad interpreter: No such file or directory

问题出在^M,原因是脚本文件的编码格式是dos,有可能是我在window下编辑完了直接传到linux的结果,可以在vim中输入以下命令确认编码格式 :set ff //可以看到dos或unix的字样. 如果的确是dos格式的, 那么你可以用set ff=unix把它强制为unix格式的, 然后存盘退出. 再运行一遍看. 也可以在命令行中用dos2unix指令转换编码 #dos2unix filename linux:执行脚本出现/bin/sh^M: bad interpreter: No suc

Shell执行脚本

Shell作用是解释执行用户的命令,用户输入一条命令,Shell就解释执行这一条,这种方式称为交互式,但还有另一种执行命令的方式称为批处理方式,用户事先写一个Shell脚本,Shell可以一次把这些命令执行完. 如下例子: 第一种执行方式:chmode+x script.sh 执行过程: Shell会fork一个子进程并调用exec执行./script.sh这个程序,exec系统调用会把子进程代码段替换成./script.sh程序的代码段,exec有一种机制,如果要执行的是一个文本文件,并且第一

ssh连接远程主机执行脚本的环境变量问题

用ssh命令ssh [email protected] "/web/tomcat-7000/bin/startup.sh" 登陆到远程机器remote上执行脚本时,遇到一个奇怪的问题:tomcat服务不能启动 Neither the JAVA_HOME nor the JRE_HOME environment variable is definedAt least one of these environment variable is needed to run this progr

Linux下设置定期执行脚本

下面针对的是非ubuntu环境,会在文章末尾介绍ubuntu的一些区别. 在Linux下,经常需要定期的执行一些脚本从而来实现一些功能. 在Linux下我们用crontab来实现定期的执行脚本这个功能,下面就介绍一下crontab的使用.以及我遇到的一些问题 一. crontab的使用说明 1. crond 是linux用来定期执行程序的命令.当安装完成操作系统之后,默认便会启动此任务调度命令.crond命令每分钟会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作.而linux任

linux环境下安装jmeter,启动执行脚本

1.下载安装jmeter安装包 下载链接: https://pan.baidu.com/s/1KPhwNDsmTIAy41fEopHQEw 提取码: spwd 2.上传linux平台,解压jmeter安装包 解压安装完成 3.设置jmeter环境变量 1)打开vi /etc/profile 2)添加变量: export PATH=/data/jmeter/apache-jmeter-3.0/bin:$PATHexport JMETER="/data/jmeter/apache-jmeter-3.