欢迎来到Introzo百科
Introzo百科
当前位置:网站首页 > 技术 > 浅谈ubuntu中执行.sh文件的几种方式的区别

浅谈ubuntu中执行.sh文件的几种方式的区别

日期:2023-10-05 22:37

前言

不同的脚本执行方式会导致不同的结果,尤其是bash环境。执行脚本的方式大致有以下几种。

先写一个简单的www.introzo.com文件:

#!/bin/bash

read -p“请输入您的名字:”firstname
read -p“请输入您的姓氏:”姓氏
echo -e "\n您的全名是: $firstname $lastname"

使用sh www.introzo.com执行

使用sh www.introzo.com执行脚本文件。该方法表示使用sh shell来执行www.introzo.com文件。 sh 已经是被 bash 取代的 shell,尽管我们声明使用 #!在 www.introzo.com 中。 /bin/bash 来执行我们的文件,但是如果使用 sh 而不是 bash,#!/bin/bash 将不再起作用。

使用bash www.introzo.com执行

这个方法其实和sh www.introzo.com是一样的。它只是使用 /bin/bash shell 来执行我们的脚本文件。

所以,其实使用dash www.introzo.com也是可以的,只是取决于你想使用哪个shell来执行脚本,但是sh、bash和dash之间有细微的区别。对于某些关键字,如let,bash支持,但sh和dash不支持。对于某些关键字,选择 bash。

使用点。执行

使用此方法之前,必须给文件添加执行权限:

$ chmod +x www.introzo.com

添加执行权限后,可以使用./www.introzo.com执行脚本。此方法与bash www.introzo.com相同。默认情况下,bin/bash 用于执行我们的脚本。

只有该执行方式需要给文件添加执行权限,其他方式不需要。

使用源码执行

使用source也可以直接执行我们的脚本:

源测试.sh 

差异

当我们使用sh www.introzo.com、bash www.introzo.com、./www.introzo.com执行脚本时,www.introzo.com运行脚本会使用新的shell环境来执行脚本中的命令,也就是说,当使用这三种方法时,脚本实际上是在子进程的shell中执行的。当子进程完成后,子进程中的变量和操作都会结束,不会传回父进程。

听不懂? ?看下面的例子:

[root@ubuntu] # bash www.introzo.com
请输入您的名字:yao <==输入名字
请输入您的姓氏: pentonBin <==输入姓氏

您的全名是:姚彭顿宾
[root@ubuntu] # echo $firstname
       <==这里没有输出

如果使用source方法执行脚本怎么办?

[root@ubuntu] # 源www.introzo.com
请输入您的名字:yao <==输入名字
请输入您的姓氏: pentonBin <==输入姓氏

您的全名是:姚彭顿宾
[root@ubuntu] # echo $firstname
yao <==在此输出名字

也就是说,source方法执行脚本是在父进程中执行的,www.introzo.com的所有操作都会在原shell中生效。这就是为什么我们不注销系统但允许对 ~/.当bashrc设置生效后,需要使用source ~/.bashrc,而不是bash ~/.bashrc。

本文到此结束。如果您有任何相关技术问题,可以联系我们的技术人员远程解决。感谢大家对本站的支持!

关灯