我有两个shell脚本a.shb.sh

我怎么能叫b.sh从shell脚本中a.sh


#1楼

看一下这个。

#!/bin/bash
echo "This script is about to run another script."
sh ./script.sh
echo "This script has just run another script."

#2楼

pathToShell="/home/praveen/"
chmod a+x $pathToShell"myShell.sh"
sh $pathToShell"myShell.sh"

#3楼

您可以使用/bin/sh调用或执行另一个脚本(通过您的实际脚本):

 # cat showdate.sh#!/bin/bashecho "Date is: `date`"# cat mainscript.sh#!/bin/bashecho "You are login as: `whoami`"echo "`/bin/sh ./showdate.sh`" # exact path for the script file

输出为:

 # ./mainscript.shYou are login as: rootDate is: Thu Oct 17 02:56:36 EDT 2013

#4楼

假设新文件是“ / home / satya / app / app_specific_env”,文件内容如下

#!bin/bashexport FAV_NUMBER="2211"

将此文件引用附加到〜/ .bashrc文件

source /home/satya/app/app_specific_env

每当您重新启动计算机或重新登录时, echo $FAV_NUMBER在终端中尝试echo $FAV_NUMBER 。 它将输出值。

万一您想立即看到效果,请在命令行中输入source ~/.bashrc


#5楼

首先,您必须包括要调用的文件:

#!/bin/bash
. includes/included_file.sh

然后您可以像这样调用函数:

#!/bin/bash
my_called_function

#6楼

我一直在寻找答案:

( exec "path/to/script" )

如前所述, exec无需创建新进程即可替换shell。 但是 ,我们可以将其放在子外壳中,这是通过使用括号实现的。

编辑:其实( "path/to/script" )就足够了。


#7楼

只需在命令行中添加您在终端中键入的任何内容即可执行脚本!
例如:

#!bin/bash
./myscript.sh &

如果要执行的脚本不在同一目录中,请使用脚本的完整路径。
例如:`/ home / user / script-directory /./ myscript.sh&


#8楼

取决于。 简要地说...如果您想在当前控制台上加载变量并执行,则可以在代码上使用source myshellfile.sh 。 例:

!#/bin/bash
set -x
echo "This is an example of run another INTO this session."
source my_lib_of_variables_and_functions.sh
echo "The function internal_function() is defined into my lib."
returned_value=internal_function()
echo $this_is_an_internal_variableset +x

如果您只想执行一个文件,而唯一对您感兴趣的是结果,则可以执行以下操作:

!#/bin/bash
set -x
./executing_only.sh
sh i_can_execute_this_way_too.sh
bash or_this_way.sh
set +x

希望对您有帮助。 谢谢。


#9楼

 #!/bin/bash# Here you define the absolute path of your scriptscriptPath="/home/user/pathScript/"# Name of your scriptscriptName="myscript.sh"# Here you execute your script$scriptPath/$scriptName# Result of script executionresult=$?

#10楼

您可以通过两种方法来执行此操作。 终端执行脚本:

#!/bin/bash
SCRIPT_PATH="/path/to/script.sh"# Here you execute your script
"$SCRIPT_PATH"# or
. "$SCRIPT_PATH"# or
source "$SCRIPT_PATH"# or
bash "$SCRIPT_PATH"# or
eval '"$SCRIPT_PATH"'# or
OUTPUT=$("$SCRIPT_PATH")
echo $OUTPUT# or
OUTPUT=`"$SCRIPT_PATH"`
echo $OUTPUT# or
("$SCRIPT_PATH")# or
(exec "$SCRIPT_PATH")

所有这些对于带空格的路径都是正确的!!!


#11楼

简单的资源将为您提供帮助。 对于前

#!/bin/bash
echo "My shell_1"
source my_script1.sh
echo "Back in shell_1"

#12楼

从其他文件导入功能存在一些问题。
首先 :您不需要执行此文件可执行文件。 最好不要这样做! 只需添加

. file

导入所有功能。 所有这些都好像它们是在文件中定义的一样。
第二 :您可以使用相同的名称定义函数。 它将被覆盖。 这不好。 您可以这样声明

declare -f new_function_name=old_function_name

并且只有在此之后才导入。 因此,您可以使用新名称调用旧函数。
第三 :您只能导入文件中定义的完整功能列表。 如果不需要,可以取消设置。 但是,如果您在取消设置后重写函数,它们将会丢失。 但是,如果您如上所述设置对它的引用,则可以在取消设置后使用相同的名称进行恢复。
最后,在常见的导入过程中很危险,而且不是那么简单。 小心! 您可以编写脚本来更轻松,更安全地执行此操作。 如果仅使用部分功能(不是全部),最好将其拆分为不同的文件。 不幸的是,这项技术在bash中效果不佳。 以python和其他一些脚本语言为例,它既简单又安全。 可以使用自己的名称仅部分导入所需的功能。 我们都希望在下一个版本中,布什将具有相同的功能。 但是现在我们必须写很多其他的鳕鱼才能做你想做的。


#13楼

chmod a+x /path/to/file-to-be-executed

那是我唯一需要的。 一旦将要执行的脚本变成这样的可执行文件,在调用脚本时,您(至少在我看来)不需要任何其他额外操作,例如sh./

感谢@Nathan Lilienthal的评论


#14楼

最佳答案建议在要调用的子脚本的第一行中添加#!/bin/bash行。 但是,即使添加了shebang,在子shell中运行脚本并捕获输出也更快*

$(source SCRIPT_NAME)

当您想继续运行相同的解释器(例如,从bash到另一个bash脚本)并确保不执行子脚本的shebang行时,此方法有效。

例如:

#!/bin/bash
SUB_SCRIPT=$(mktemp)
echo "#!/bin/bash" > $SUB_SCRIPT
echo 'echo $1' >> $SUB_SCRIPT
chmod +x $SUB_SCRIPT
if [[ $1 == "--source" ]]; thenfor X in $(seq 100); doMODE=$(source $SUB_SCRIPT "source on")done
elsefor X in $(seq 100); doMODE=$($SUB_SCRIPT "source off")done
fi
echo $MODE
rm $SUB_SCRIPT

输出:

~ ❯❯❯ time ./test.sh
source off
./test.sh  0.15s user 0.16s system 87% cpu 0.360 total~ ❯❯❯ time ./test.sh --source
source on
./test.sh --source  0.05s user 0.06s system 95% cpu 0.114 total

*例如,当病毒或安全工具在设备上运行时,执行新进程可能需要花费额外的100毫秒。


#15楼

使用反引号。

$ ./script-that-consumes-argument.sh `sh script-that-produces-argument.sh`

然后获取生产者脚本的输出作为消费者脚本的参数。


#16楼

如果您在同一目录中还有另一个文件,则可以执行以下操作:

bash another_script.sh

要么

source another_script.sh

要么

. another_script.sh

当您使用bash代替source ,脚本无法更改父脚本的环境。 的. command是POSIX标准,而source命令是的更易读的bash同义词. (我更喜欢source . )。 如果您的脚本位于其他位置,请提供该脚本的路径。 相对路径和完整路径都应该世界。


#17楼

您可以通过几种不同的方式来执行此操作:

  1. 使其他脚本可执行,在顶部添加#!/bin/bash行,并在$ PATH环境变量中添加文件所在的路径。 然后,您可以将其作为普通命令来调用;

  2. 或者使用如下所示的source命令(别名为. )来调用它: source /path/to/script ;

  3. 或使用bash命令执行它: /bin/bash /path/to/script ;

第一个和第三个方法将脚本作为另一个过程执行,因此另一个脚本中的变量和函数将不可访问。
第二种方法在第一个脚本的过程中执行该脚本,并从另一个脚本中提取变量和函数,以便可以从调用脚本中使用它们。

在第二种方法中,如果您在第二个脚本中使用exit ,它将也退出第一个脚本。 第一种和第三种方法不会发生这种情况。

如何从另一个Shell脚本调用Shell脚本?相关推荐

  1. 【Groovy】Groovy 脚本调用 ( Groovy 脚本中调用另外一个 Groovy 脚本 | 调用 evaluate 方法执行 Groovy 脚本 | 参数传递 )

    文章目录 一.Groovy 脚本中调用另外一个 Groovy 脚本 1.调用 evaluate 方法执行 Groovy 脚本 2.参数传递 二.完整代码示例 1.调用者 Groovy 脚本 2.被调用 ...

  2. shell调用python获取返回值_[linux的shell脚本调用python脚本的返回值][shell调python][ubuntu的shell调用python脚本得到返回值]...

    最近搞个东西,需要写shell脚本,但在shell脚本里需要调用python并得到变量值,网上找了很多都是python调shell的,最后请教了一下郭总 知道了sys.argv的用法后才搞定了,在此感 ...

  3. 神奇的python(一)之python脚本调用shell常用方法

    一.OS模块 (1) OS模块的system方法 用法: ① import os ② os.system("command") 返回值:命令的执行状态 缺点:无法获取命令的返回内容 ...

  4. VB脚本:BAT脚本调用VB脚本的方法

     毫无疑问地,是懒惰促进或引领着人类科技的发展.工作中使用一些小工具可以大幅提高工作效率,释放体力劳动,减少手工操作与守候时间,何乐而不为呢? 在数通平台软件的性能或功能稳定性测试过程中,经常需要 ...

  5. 【Groovy】Groovy 脚本调用 ( Groovy 脚本编译 | Groovy 脚本字节码文件分析 )

    文章目录 一.Groovy 脚本编译 二.Groovy 脚本字节码文件分析 一.Groovy 脚本编译 Groovy 脚本编译后的字节码文件是一个继承 Script 的类 ; 编译下面的 Script ...

  6. shell脚本调用python脚本,获取python返回值并且做字符串的切分

    #!/usr/bin/python # coding=utf-8import sys import pymysql#pymysql连接mysql def getmsg():sysconn = pymy ...

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

    文章目录 一.绑定作用域 binding 变量分析 二.Binding 类 variables 成员分析 三.完整代码示例 1.调用者 Groovy 脚本 2.被调用者 Groovy 脚本 3.执行结 ...

  8. 【Groovy】Groovy 脚本调用 ( Groovy 脚本中的作用域 | 本地作用域 | 绑定作用域 )

    文章目录 一.Groovy 脚本中的作用域 ( 本地作用域 | 绑定作用域 ) 二.Groovy 脚本中的作用域代码示例 一.Groovy 脚本中的作用域 ( 本地作用域 | 绑定作用域 ) 在 Gr ...

  9. Linux中shell运行方式,linux脚本中父shell与子shell 执行的几种方式

    本文主要介绍以下几个命令的区别: shell subshell source $ (commond) `commond` Linux执行Scripts有两种方式,主要区别在于是否建立subshell ...

最新文章

  1. Jquery Ajax调用aspx页面方法
  2. vim常用命令总结 (转)
  3. Leetcode 583.两个字符串的删除操作
  4. 分支语句语法格式小结 java
  5. 浅析如何通过PHP类的反射来实现依赖注入
  6. oracle写完存储过程之后,oracle存储过程和自定义函数
  7. 《企业迁云实战》——1.3 云服务的发展现状
  8. Accept是又产生一个Socket端口吗?
  9. HDU4510 小Q系列故事——为什么时光不能倒流【时间计算】
  10. 引用com.sencha.gxt.ui.GXT加载错误解决方案
  11. 取消UltraEdit提示“文件可能不是DOS格式”
  12. 病毒木马查杀实战第008篇:熊猫烧香之病毒查杀总结
  13. 【arp】关于arp和arping命令的使用
  14. java wsimport 调用_webService----wsimport调用方式
  15. 输入一个分数,将其约分为最简分式
  16. javaweb实现邮箱验证码
  17. 铁路专业的未来发展趋势如何
  18. 平安云:在群雄逐鹿的云市场中野蛮生长
  19. Arduino开发(一)_软件开发IDE工具的安装
  20. uni-app 微信小程序提示音一闪而逝

热门文章

  1. Warning: Data truncated for column #39;AirPress#39; at row 1
  2. Fragmen的onAttach方法
  3. [转帖]/proc/sys/net/ipv4/ 下参数理解
  4. [Beego模型] 三、高级查询
  5. Linux系统网络性能实例分析
  6. C++-文件【1】-按行读文本文件的两种方法
  7. Mysql查询高速缓存区
  8. axis 开发webservice
  9. dell R710 更换raid卡后,raid卡信息没有了,处理方案
  10. 1 Linux SSH安全加固