如何从另一个Shell脚本调用Shell脚本?
我有两个shell脚本a.sh
和b.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楼
您可以通过几种不同的方式来执行此操作:
使其他脚本可执行,在顶部添加
#!/bin/bash
行,并在$ PATH环境变量中添加文件所在的路径。 然后,您可以将其作为普通命令来调用;或者使用如下所示的
source
命令(别名为.
)来调用它:source /path/to/script
;或使用
bash
命令执行它:/bin/bash /path/to/script
;
第一个和第三个方法将脚本作为另一个过程执行,因此另一个脚本中的变量和函数将不可访问。
第二种方法在第一个脚本的过程中执行该脚本,并从另一个脚本中提取变量和函数,以便可以从调用脚本中使用它们。
在第二种方法中,如果您在第二个脚本中使用exit
,它将也退出第一个脚本。 第一种和第三种方法不会发生这种情况。
如何从另一个Shell脚本调用Shell脚本?相关推荐
- 【Groovy】Groovy 脚本调用 ( Groovy 脚本中调用另外一个 Groovy 脚本 | 调用 evaluate 方法执行 Groovy 脚本 | 参数传递 )
文章目录 一.Groovy 脚本中调用另外一个 Groovy 脚本 1.调用 evaluate 方法执行 Groovy 脚本 2.参数传递 二.完整代码示例 1.调用者 Groovy 脚本 2.被调用 ...
- shell调用python获取返回值_[linux的shell脚本调用python脚本的返回值][shell调python][ubuntu的shell调用python脚本得到返回值]...
最近搞个东西,需要写shell脚本,但在shell脚本里需要调用python并得到变量值,网上找了很多都是python调shell的,最后请教了一下郭总 知道了sys.argv的用法后才搞定了,在此感 ...
- 神奇的python(一)之python脚本调用shell常用方法
一.OS模块 (1) OS模块的system方法 用法: ① import os ② os.system("command") 返回值:命令的执行状态 缺点:无法获取命令的返回内容 ...
- VB脚本:BAT脚本调用VB脚本的方法
毫无疑问地,是懒惰促进或引领着人类科技的发展.工作中使用一些小工具可以大幅提高工作效率,释放体力劳动,减少手工操作与守候时间,何乐而不为呢? 在数通平台软件的性能或功能稳定性测试过程中,经常需要 ...
- 【Groovy】Groovy 脚本调用 ( Groovy 脚本编译 | Groovy 脚本字节码文件分析 )
文章目录 一.Groovy 脚本编译 二.Groovy 脚本字节码文件分析 一.Groovy 脚本编译 Groovy 脚本编译后的字节码文件是一个继承 Script 的类 ; 编译下面的 Script ...
- shell脚本调用python脚本,获取python返回值并且做字符串的切分
#!/usr/bin/python # coding=utf-8import sys import pymysql#pymysql连接mysql def getmsg():sysconn = pymy ...
- 【Groovy】Groovy 脚本调用 ( Groovy 脚本中调用另外一个 Groovy 脚本 | 绑定作用域 binding 变量分析 | Binding 类 variables 成员分析 )
文章目录 一.绑定作用域 binding 变量分析 二.Binding 类 variables 成员分析 三.完整代码示例 1.调用者 Groovy 脚本 2.被调用者 Groovy 脚本 3.执行结 ...
- 【Groovy】Groovy 脚本调用 ( Groovy 脚本中的作用域 | 本地作用域 | 绑定作用域 )
文章目录 一.Groovy 脚本中的作用域 ( 本地作用域 | 绑定作用域 ) 二.Groovy 脚本中的作用域代码示例 一.Groovy 脚本中的作用域 ( 本地作用域 | 绑定作用域 ) 在 Gr ...
- Linux中shell运行方式,linux脚本中父shell与子shell 执行的几种方式
本文主要介绍以下几个命令的区别: shell subshell source $ (commond) `commond` Linux执行Scripts有两种方式,主要区别在于是否建立subshell ...
最新文章
- Jquery Ajax调用aspx页面方法
- vim常用命令总结 (转)
- Leetcode 583.两个字符串的删除操作
- 分支语句语法格式小结 java
- 浅析如何通过PHP类的反射来实现依赖注入
- oracle写完存储过程之后,oracle存储过程和自定义函数
- 《企业迁云实战》——1.3 云服务的发展现状
- Accept是又产生一个Socket端口吗?
- HDU4510 小Q系列故事——为什么时光不能倒流【时间计算】
- 引用com.sencha.gxt.ui.GXT加载错误解决方案
- 取消UltraEdit提示“文件可能不是DOS格式”
- 病毒木马查杀实战第008篇:熊猫烧香之病毒查杀总结
- 【arp】关于arp和arping命令的使用
- java wsimport 调用_webService----wsimport调用方式
- 输入一个分数,将其约分为最简分式
- javaweb实现邮箱验证码
- 铁路专业的未来发展趋势如何
- 平安云:在群雄逐鹿的云市场中野蛮生长
- Arduino开发(一)_软件开发IDE工具的安装
- uni-app 微信小程序提示音一闪而逝
热门文章
- Warning: Data truncated for column #39;AirPress#39; at row 1
- Fragmen的onAttach方法
- [转帖]/proc/sys/net/ipv4/ 下参数理解
- [Beego模型] 三、高级查询
- Linux系统网络性能实例分析
- C++-文件【1】-按行读文本文件的两种方法
- Mysql查询高速缓存区
- axis 开发webservice
- dell R710 更换raid卡后,raid卡信息没有了,处理方案
- 1 Linux SSH安全加固