脚本执行

解释器的区别

脚本常用的开头是“#!解释器”,其中“#!”是特殊的表示符,其后面跟着的是解释此脚本的解释器路径。

解释器分为很多类。比如/bin/bash,/bin/sh,/bin/csh,/bin/perl,/bin/awk等等。

GNU/Linux操作系统中的bin/sh本是bash的符号链接,但是bash过于复杂,所以有人有把NetBSD的ash移植到了Linux并更名为dash,并建议将bin/sh指向它,以获得更快的执行速度。且Dash Shell比 Bash Shell要小很多,且符合POSIX标准。

Ubuntu继承了Debian,所以从Ubuntu 6.10开始默认是Dash Shell。


综上,在Ubuntun中有2个解释器,一个是较重的bin/bash,另外一个是轻量级的bin/sh,且它指向ash,而ash本身是从其它操作系统中移植过来的。

而/bin/sh/bin/bash虽然大体上没什么区别,但仍存在不同的标准。标记为#!/bin/sh的脚本不应使用任何POSIX没有规定的特性 (如let等命令, 但#!/bin/bash可以)。

执行命令的区别

执行脚本有多种方式:

方式一:source命令,sourcetest.sh;

方式二:点命令,. test.sh;[注意点与文件名之前有空格]

方式三:指定脚本执行器,shtest.sh;

方式四:点杠命令,./test.sh

source命令与点命令的作用是完全相同的。

而指定脚本执行器与点杠命令作用完全相同。

但是source与指定脚本执行器执行的区别在于,前者会在当前进程生效,所以脚本中改变的环境变量,会在当前的bash中生效,而后者会新生成一个子进程执行,所以当前进程并不会有任何改变,如下图所示。


举例

测试脚本如下

#!/bin/bash

echo $$

tstvar=12345

执行结果如下

参考

[0] http://www.cnblogs.com/EasonJim/p/6850319.html

[1] http://blog.csdn.net/david_xtd/article/details/8012627

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值