栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Linux执行Bash脚本时的三种方法及其不同

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Linux执行Bash脚本时的三种方法及其不同

Linux'执行Bash或sh脚本时,有三种不同的方法,

1. ./+文件名执行。 需要注意文件以及用户是否拥有可执行权限。

2. sh+文件名执行。 文件无需可执行权限

3. source 文件名 文件无需可执行权限。

不同点:

1.执行方式的不同

当脚本以./ 与sh方式执行时,系统会自动生成一个全新的bash子进程用来执行程序。可以理解为单间。大致如下

当脚本以source执行时,系统是使用原本已有公共的bash进程(存疑,为自己猜测?)进行该脚本,可以理解为公共空间。大致如下:

2.由于执行方式的不同引起的对于当前进程变量的应用(是否可以理解为系统主进程的变量?)问题。具体验证如下,首先在命令行中定义一个变量 meg ,

meg=thisisameg

然后在脚本中添加打印变量的代码。

#! /bin/sh
echo $meg

分别使用./ 与source运行代码结果如下

./无法获得变量meg, 而source却可以获得变量内容。

可以将其理解为meg变量为JAVA编程中的父类的私有变量,且未写set/get方法。此时,子bash进程无法访问父类的私有变量。而source由于是直接在父类中执行,所以能够调用父类中的私有变量。解决的方法如下:

在命令行中输入:

export meg=thismegisnotquit

,此时再次运行结果为

此时即可./执行方式也可访问meg变量。

注:export为将当前进程的变量传递给子进程,可以理解JAVA为父类的私有变量添加了构造器,这样子类就可以访问这个变量。但两个子进程中的变量无法这样获得。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/692500.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号