首页
学习
活动
专区
圈层
工具
发布

在 Shell 脚本中调用另一个 Shell 脚本的三种方式

子 Shell 从父 Shell 继承环境变量,但是子 Shell 中的环境变量不会带回父 Shell。 exec exec 与 fork 不同,不需要新开一个子 Shell 来执行被调用的脚本....被调用的脚本与父脚本在同一个 Shell 内执行。但是使用 exec 调用一个新脚本以后, 父脚本中 exec 行之后的内容就不会再执行了。...所以被调用的脚本中声明的变量和环境变量, 都可以在主脚本中进行获取和使用。 其实从命名上可以感知到其中的细微区别,下面通过两个脚本来体会三种调用方式的不同: 第一个脚本,我们命名为 1.sh: #!...exec 在同一个 Shell 内执行,但是父脚本中 exec 行之后的内容就不会再执行了 source 在同一个 Shell 中执行,在被调用的脚本中声明的变量和环境变量, 都可以在主脚本中进行获取和使用...参考: 在shell脚本中调用另一个脚本的三种不同方法(fork, exec, source)

4.9K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Shell脚本调用另一个脚本的三种方法

    脚本中调用first.sh呢?...first file 4.三者的区别 使用source命令和点号.是等价了,类似于C/C++中的#include预处理指令,都是将指定的脚本内容拷贝至当前的脚本中,由一个Shell进程来执行。...使用sh命令来调用另外的脚本和前面两种方法有着本质的区别。使用sh命令则会开启新的Shell进程来执行指定的脚本,这样的话,父进程中的变量在子进程中就无法访问。...(3)全局变量:在脚本中定义,仅在当前Shell脚本中有效,其他Shell脚本进程不能访本,其作用域从定义的位置开始,到脚本结束或被显示删除的地方为止。...注意,全局变量既可以在Shell函数内定义,也可以在shell函数外定义,因为shell函数内定义的变量默认为global,且作用域从“函数被调用时执行变量定义的地方”开始,到脚本结束或被显示删除的地方为止

    12.5K50

    在shell脚本中,如何将一个命令存储在一个变量中

    问题 我想将一个命令保存到一个变量中,以便稍后再使用(不是命令的输出,而是命令本身)。...我有一个简单的脚本如下: command="ls"; echo "Command: $command"; #Output is: Command: ls b=`$command`; echo $b;...grep: No such file or directory ls: cannot access '^': No such file or directory 我如何将这样(带有管道/多个命令)的命令存储在变量中以供以后使用...回答 对于带有管道或重定向的组合命令最推荐的方式是将其封装到一个函数里,然后在需要时直接调用即可。...一个高赞回答是使用 eval,代码如下: x="ls | wc" eval "$x" y=$(eval "$x") echo "$y" 但是其中 eval 是一个非常容易引发错误的内置命令,在没有警告用户可能存在不可预料的解析行为风险的情况下

    1.6K10

    【Groovy】Groovy 脚本调用 ( Groovy 脚本中调用另外一个 Groovy 脚本 | 绑定作用域 binding 变量分析 | Binding 类 variables 成员分析 )

    文章目录 一、绑定作用域 binding 变量分析 二、Binding 类 variables 成员分析 三、完整代码示例 1、调用者 Groovy 脚本 2、被调用者 Groovy 脚本 3、执行结果...一、绑定作用域 binding 变量分析 ---- 分析 groovy.lang.Script 类的 evaluate 方法源码 , 在该方法中 , 创建了一个 GroovyShell 对象 ; 在创建时..., 所有的 绑定作用域 变量 , 都封装在 private Map variables 成员中 ; /** * 表示脚本的变量绑定,可以从脚本对象外部进行更改,也可以在脚本外部创建并传递到脚本中。...arg1], age2:16] args 变量对应的值是 [arg0, arg1] , 这是传入的脚本执行参数 ; age2 变量对应的值是 16 , 这是使用 age2 = "16" 代码 , 在本脚本中定义的...绑定作用域变量 ; 三、完整代码示例 ---- 1、调用者 Groovy 脚本 // 要传入的参数 args = [] args[0] = "arg0" args[1] = "arg1" // 调用

    1.4K20

    Shell内置命令大全,Linux运维工程师收藏!

    示例:sleep 60 &disown在上面的示例中,sleep 60 &命令将sleep命令置于后台运行,并将其作为一个作业。然后,使用disown命令将该作业从Shell的作业列表中移除。...popdpopd命令用于从目录堆栈中弹出并切换到上一个目录。示例:popd上面的示例中,popd命令将从目录堆栈中弹出并切换到上一个目录。printfprintf命令用于格式化输出。...获取函数的返回值,并将其存储在变量result中。最后,我们使用echo命令输出返回值。selectselect命令用于创建一个菜单并等待用户选择。...选择后,通过$option变量可以获取用户的选择。在示例中,我们使用echo命令输出用户选择的选项,并使用break语句退出循环。setset命令用于设置Shell的选项和参数。...通过调用print_args函数并传递三个参数,我们可以看到在调用shift命令后,参数向左移动了一位,并丢弃了第一个参数。因此,在第二次输出中,我们只能看到"banana"和"orange"。

    1.4K00

    Shell【脚本 04】传递参数的4种方式(位置参数、特殊变量、环境变量和命名参数)实例说明

    当一个脚本文件的第一行包含了shebang,操作系统在执行该文件时会将该路径后的所有参数传递给指定的解释器,让它来解释执行该脚本。...此时,如果这个文件具有可执行权限(例如755),系统会把它作为一个shell脚本来执行,使用的是默认的shell解释器(在大多数Unix/Linux系统中,这是Bash shell)。...下面是Shell脚本的基础知识:1.2 变量用于存储数据,可以使用=来赋值,例如name="kite"。...在shell脚本中,可以使用$VAR的形式来访问环境变量。例如:#!.../bin/bashecho "The value of HOME is $HOME"echo "The value of PATH is $JAVA_HOME"在命令行中执行该脚本时,输出环境变量的值,

    22310

    Linux Shell编程零基础入门

    这些变量与环境变量不同,环境变量被存储在另一内存区,叫做用户环境区,这块内存中的变量可以被子进程访问。...sed基本上可以看成一个查找替换程序,从标准输入,例如管道读入文本,并将结果输出到标准输出,sed使用正则表达式 进行搜索。...有时候,选项还会带一个值,例如-c5等,这时要在option_string中该选项字母后面加上一个冒号,getopts发现冒号 后,会读取该值,然后将该值放入特殊变量OPTARG中。...第四,我们也可以在Shell下调试Shell Script脚本,当然最简单的方法就是用echo输出查看变量取值了。Bash也提供了真正的调试方法,就是执行脚本的时候用-x参数。 sh ?...x filename.sh 这会执行脚本并显示脚本中所有变量的取值,也可以使用参数-n,它并不执行脚本,只是返回所有的语法错误。

    1.3K10

    Linux Shell编程入门

    这些变量与环境变量不同,环境变量被存储在另一内存区,叫做用户环境区,这块内存中的变量可以被子进程访问。...sed基本上可以看成一个查找替换程序,从标准输入,例如管道读入文本,并将结果输出到标准输出,sed使用正则表达式 进行搜索。...有时候,选项还会带一个值,例如-c5等,这时要在option_string中该选项字母后面加上一个冒号,getopts发现冒号 后,会读取该值,然后将该值放入特殊变量OPTARG中。...第四,我们也可以在Shell下调试Shell Script脚本,当然最简单的方法就是用echo输出查看变量取值了。Bash也提供了真正的调试方法,就是执行脚本的时候用-x参数。 sh ?...x filename.sh 这会执行脚本并显示脚本中所有变量的取值,也可以使用参数-n,它并不执行脚本,只是返回所有的语法错误。

    4K20

    Linux Shell编程入门

    这些变量与环境变量不同,环境变量被存储在另一内存区,叫做用户环境区,这块内存中的变量可以被子进程访问。...sed基本上可以看成一个查找替换程序,从标准输入,例如管道读入文本,并将结果输出到标准输出,sed使用正则表达式 进行搜索。...有时候,选项还会带一个值,例如-c5等,这时要在option_string中该选项字母后面加上一个冒号,getopts发现冒号 后,会读取该值,然后将该值放入特殊变量OPTARG中。...第四,我们也可以在Shell下调试Shell Script脚本,当然最简单的方法就是用echo输出查看变量取值了。Bash也提供了真正的调试方法,就是执行脚本的时候用-x参数。 sh ?...x filename.sh 这会执行脚本并显示脚本中所有变量的取值,也可以使用参数-n,它并不执行脚本,只是返回所有的语法错误。

    1.6K20

    快速学习Bash

    我们首先看Bash用变量存储数据的能力。正如我们在C语言中看到的,变量是内存中的一块儿空间,可以用于存储数据。我们可以通过变量名来引用变量中保持的数据。借助变量,程序员可以复用出现过的数据。...比如: $var='abc bcd' 或者: $var="abc bcd" 在Bash中,我们可以把一个命令输出的文本直接赋予给一个变量: $now=`date` 借助``符号,date命令的输出存入了变量...我们还可以把一个变量中的数据赋值给另一个变量: $another=$var 2)引用变量 我们可以用$var的方式来引用变量。在Bash中,所谓的引用变量就是把变量翻译成变量中存储的文本。.../bin/bash echo hello exit 1 echo world 你可以运行该脚本,检查其输出结果,并查看其返回代码。 函数 在Bash中,脚本和函数有很多相似的地方。...命令source的作用是在同一个进程中执行另一个文件中的Bash脚本。比如说,有两个脚本,my_info.bash和app.bash。脚本my_info.sh中的内容是:  #!

    2K60

    快速学习Bash

    我们首先看Bash用变量存储数据的能力。正如我们在C语言中看到的,变量是内存中的一块儿空间,可以用于存储数据。我们可以通过变量名来引用变量中保持的数据。借助变量,程序员可以复用出现过的数据。...比如: $var='abc bcd' 或者: $var="abc bcd" 在Bash中,我们可以把一个命令输出的文本直接赋予给一个变量: $now=`date` 借助``符号,date命令的输出存入了变量...我们还可以把一个变量中的数据赋值给另一个变量: $another=$var 2)引用变量 我们可以用$var的方式来引用变量。在Bash中,所谓的引用变量就是把变量翻译成变量中存储的文本。.../bin/bash echo hello exit 1 echo world 你可以运行该脚本,检查其输出结果,并查看其返回代码。 函数 在Bash中,脚本和函数有很多相似的地方。...命令source的作用是在同一个进程中执行另一个文件中的Bash脚本。比如说,有两个脚本,my_info.bash和app.bash。脚本my_info.sh中的内容是:  #!

    1.3K20

    快速学习Bash

    我们首先看Bash用变量存储数据的能力。正如我们在C语言中看到的,变量是内存中的一块儿空间,可以用于存储数据。我们可以通过变量名来引用变量中保持的数据。借助变量,程序员可以复用出现过的数据。...比如: $var='abc bcd' 或者: $var="abc bcd" 在Bash中,我们可以把一个命令输出的文本直接赋予给一个变量: $now=`date` 借助``符号,date命令的输出存入了变量...我们还可以把一个变量中的数据赋值给另一个变量: $another=$var 2)引用变量 我们可以用$var的方式来引用变量。在Bash中,所谓的引用变量就是把变量翻译成变量中存储的文本。.../bin/bash echo hello exit 1 echo world 你可以运行该脚本,检查其输出结果,并查看其返回代码。 函数 在Bash中,脚本和函数有很多相似的地方。...命令source的作用是在同一个进程中执行另一个文件中的Bash脚本。比如说,有两个脚本,my_info.bash和app.bash。脚本my_info.sh中的内容是:  #!

    1.4K30

    getopts(1) builtin command

    0.背景 在执行 Shell 脚本时,可以像运行应用程序一样传入相应的参数,在脚本内部根据传入的参数内容执行对应的操作。...Shell 脚本中可以通过1...N形式的符号来引用传入的参数,0表示当前脚本的名称。1~N 和传入参数位置相对应,比如1表示执行脚本时传入的第一个参数,2表示传入的第二个参数,以此类推引用其他参数。...如果是静默模式,无效选项字符将存储在 OPTARG 变量中,且不会打印任何错误消息。...5.特殊变量 getopts 的使用涉及一些特殊变量。 OPTARG OPTARG 存储当前选项的参数值。如果选项需要一个参数,getopts 会将该参数存储在 OPTARG 中。...OPTIND OPTIND 是 getopts 内建变量,用于表示下一个要处理的参数的索引位置,从 1 开始。getopts 处理选项时会自动更新 OPTIND。

    27410

    带你认识 flask 中的数据库

    本处,我从DATABASE_URL环境变量中获取数据库URL,如果没有定义,我将其配置为basedir变量表示的应用顶级目录下的一个名为app.db的文件路径。...这是一个看起来相当艰巨的任务,为了实现它,Alembic维护一个数据库迁移存储库,它是一个存储迁移脚本的目录。每当对数据库结构进行更改后,都需要向存储库中添加一个包含更改的详细信息的迁移脚本。...当你将一个函数作为默认值传入后,SQLAlchemy会将该字段设置为调用该函数的值(请注意,在utcnow之后我没有包含(),所以我传递函数本身,而不是调用它的结果)。...如果在会话执行的任何时候出现错误,调用db.session.rollback()会中止会话并删除存储在其中的所有更改。...flask shell命令是flask命令集中的另一个非常有用的工具。 shell命令是Flask在继run之后的实现第二个“核心”命令。这个命令的目的是在应用的上下文中启动一个Python解释器。

    2.7K20

    从npm、npx说起,到shell

    脚本在 shell 中运行,取决于平台。...这些脚本都通过 Shell 的解释执行,而不通过编译 Shell 是一个工具箱,提供了各种小工具,供用户方便地使用操作系统的功能 (YY):在排序算法中,Shell是希尔排序的名称。...,可以将该命令的参数原样输出 -n:可以取消末尾的回车符,使得下一个提示符紧跟在输出内容的后面 -e:会解释引号(双引号和单引号)里面的特殊字符(比如换行符\n);否则原样输出 快捷键: Ctrl +...$SHELL $() 子命令扩展,扩展成另一个命令的运行结果 echo "$(cal)" $((...)).../usr/bin/env bash set -euxo set -u:遇到不存在的变量就会报错,并停止执行(默认忽略跳过) set -x:在运行结果之前,先输出执行的那一行命令(默认情况下,脚本执行后,

    4.2K20

    【Shell 脚本编程实战营】带你快速编写第一个Shell脚本:从入门到实践

    /来指定执行当前目录下的脚本。执行后,你会在终端看到输出的"Hello, World!"。 三、Shell脚本变量 (一)变量的定义和使用 在Shell脚本中,变量是非常有用的。...然后在echo命令中,使用$name来引用这个变量的值。 (二)环境变量 除了自定义变量,Shell还有一些预定义的环境变量。这些环境变量存储了系统的一些信息,比如当前用户、当前工作目录等。...例如,$USER变量存储了当前登录的用户名,我们可以这样使用它: echo "Current user is $USER" (三)变量的作用域 在Shell脚本中,变量的作用域默认是全局的。...六、Shell脚本实践案例 (一)备份文件脚本 我们来编写一个简单的文件备份脚本。这个脚本可以将指定目录下的所有文件备份到另一个目录中。 #!...七、总结 通过本文的学习,我们从最基础的概念开始,逐步学习了如何编写第一个Shell脚本,了解了Shell脚本中的变量、条件判断、循环等重要概念,并通过实际的案例进行了实践。

    42520
    领券