shell程序执行方式(三种方式)

本文通过实验探讨了Shell脚本的三种执行方式:无权限执行、使用sudo执行和直接执行。在不同方式下,脚本的执行权限、变量的保留情况存在差异。直接执行脚本时,变量值可在进程中保留;而在新进程中执行,则变量无法传递给父进程。

实验

假设有一个脚本script.sh 使用BASH shell

脚本内容
#!/bin/bash
name='Tim'
echo 'finished'

这个脚本创建了一个name变量,并给这个变量赋了一个值。等会我们将执行这个命令,执行完成之后我们试着单独echo这个变量,看看会有什么不同的结果。
1.使用./script.sh
2.使用bash script.sh 或者sh script.sh
3.使用. script.sh 注意!.是一个命令,后面要有空格(source命令也称为“点命令”,也就是一个点符号(.),是bash的内部命令。)

分别以三种方式执行这个脚本

1.第一种方式,直接执行权限不足。


我们可以使用chmod命令授予权限,或者使用sudo执行


可以看到,脚本执行结束后,我们在脚本中给变量的值没有拿到。

2.第二种方式

在执行之前,我们先收回这个脚本的执行权限并做验证。


然后我们执行


可以看到,脚本可以直接执行。执行结束后,我们在脚本中给变量的值也没有拿到。

3.第三种方式


可以看到,这个脚本可以直接执行,而且可以显示脚本里面的变量值。就好像这个变量被带出来了一样!

总结

综上,我们可以总结出这三种脚本执行方式的区别。

是否需要可执行权限


其实前面出现的变量被带出来的现象,是由这个shell是否在新的进程执行这个脚本决定的。如果在一个新的子进程执行这个脚本,那么在这个子进程执行完这个脚本后,父进程是无法获取子进程的变量的。而如果直接在执行脚本命令的那个进程(没有新创建进程)运行脚本的话,它的变量是一直保留在这个进程里的。

是否以新的进程运行脚本


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值