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

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

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为父类的私有变量添加了构造器,这样子类就可以访问这个变量。但两个子进程中的变量无法这样获得。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5692966.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存