扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:builder.com.cn 2007年1月19日
关键字: VincentDanen 脚本 Linux shell
本文介绍了一种替代传统shell脚本(如bash)的方法。如果你的资源有限,你可以考虑使用execline脚本这种更加简洁、安全而快速的脚本方法。
许多人用bash,或“sh”(它一般,但并非总是指bash)编写shell脚本。其它shell也有执行shell脚本的功能,但由shell执行shell脚本的问题在于:它们可能占用更多内存,因为如果你从一个shell中执行shell脚本,你要运行两个而不是一个shell。例如,如果你执行一个shell脚本并查看它的输出结果,可能会看到以下内容:
25024 pts/0Rs0:00 -zsh
25036 pts/0T0:00 /bin/sh ./test.sh
25037 pts/0T0:00 sleep 100
在编写shell脚本时,存在一些替代bash和类似shell的方法,特别是如果资源有限的时候更是如此。execline就是其中一种替代方法。execline是一种非交互性的安全脚本语言,其语法与传统的shell有很大差异。它非常简单直接,安全而便利,速度也非常快。
例如,如果上面的结果是由test.sh脚本输出的,它包含以下代码:
#!/bin/sh
sleep 100
其对应的execline代码为:
#!/bin/sh
/bin/foreground { /bin/sleep 100 }
但是我们注意到,与/bin/sh不同的是,execline程序没有延迟:
16183 pts/0Rs0:00 -zsh
16247 pts/0T0:00 /bin/sleep 100
这是因为execline建立了一个事件链,然后退出。每段execline脚本的每一行用前一个命令的输出结果作为下一个命令的输入。一旦execline解析了脚本,它启动事件链,然后退出。虽然execline在处理许多类型的脚本方面非常优秀,但它也存在一些限制。它不能处理需要编写脚本的每一种情况。(访问http://www.skarnet.org/software/execline/execline.html,参阅“当前限制”部分。)
当execline与runit这样的工具结合使用时,由于系统开销低,系统启动速度非常迅速。一旦你习惯它们后,execline脚本也不会过于复杂。列表A中Annivx内提供的第1阶段runit脚本就是一个典型的例子。
另外,使用execline并不排除使用shell测试,但不是应用下面的代码:
if [ -f /sbin/runit.old ]; then
?rm -f /sbin/runit.old
fi
而是使用:
/bin/foreground {
/bin/if {
/usr/bin/test -f /sbin/runit.old
}
/bin/rm -f /sbin/runit.old
}
execline是一款优秀的脚本工具,对那些需要处理大量脚本,或能够(同时)执行许多次的脚本,或应用嵌套环境的开发者更是如此。
责任编辑:张琎
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者