WEB开发网
开发学院软件开发Shell Bash 实例:探讨 ebuild 系统 阅读

Bash 实例:探讨 ebuild 系统

 2009-06-30 04:46:00 来源:WEB开发网   
核心提示: ebuild,最终版本#!/usr/bin/env bashif [ $# -ne 2 ]then echo "Please specify ebuild file and unpack, compile or all" exit 1fisource /etc/ebuild.conf

ebuild,最终版本

#!/usr/bin/env bashif [ $# -ne 2 ]then     
echo "Please specify ebuild file and unpack, compile or all"
exit 1fisource /etc/ebuild.confif [ -z "$DISTDIR" ]then
# set DISTDIR to /usr/src/distfiles if not already set
DISTDIR=/usr/src/distfilesfiexport DISTDIRebuild_unpack() {
#make sure we're in the right directory
cd ${ORIGDIR}
if [ -d ${WORKDIR} ]
then
rm -rf ${WORKDIR}
fi
mkdir ${WORKDIR}
cd ${WORKDIR}
if [ ! -e ${DISTDIR}/${A} ]
then
echo "${DISTDIR}/${A} does not exist. Please download first."
exit 1
fi
tar xzf ${DISTDIR}/${A} e
cho "Unpacked ${DISTDIR}/${A}."
#source is now correctly unpacked}user_compile() {
#we're already in ${SRCDIR}
if [ -e configure ]
then
#run configure script if it exists
./configure --prefix=/usr
fi
#run make
make $MAKEOPTS MAKE="make $MAKEOPTS" }
ebuild_compile() {
if [ ! -d "${SRCDIR}" ]
then
echo "${SRCDIR} does not exist -- please unpack first."
exit 1
fi
#make sure we're in the right directory
cd ${SRCDIR}
user_compile}export ORIGDIR=`pwd`export WORKDIR=${ORIGDIR}/workif [ -e "$1" ]
then
source $1else
echo "Ebuild file $1 not found."
exit 1fiexport SRCDIR=${WORKDIR}/${P}case "${2}" in
unpack)
ebuild_unpack
;;
compile)
ebuild_compile
;;
all)
ebuild_unpack
ebuild_compile
;;
*)
echo "Please specify unpack, compile or all as the second arg"
exit 1
;;esac

请注意,在文件的开始部分执行 /etc/ebuild.conf。另外,还要注意,在缺省 user_compile() 函数中使用 "$MAKEOPTS"。您可能在想,这管用吗 - 毕竟,在执行实际上事先定义 "$MAKEOPTS" 的 /etc/ebuild.conf 之前,我们引用了 "$MAKEOPTS"。对我们来说幸运的是,这没有问题,因为变量扩展只在执行 user_compile() 时才发生。在执行 user_compile() 时,已经执行了 /etc/ebuild.conf,并且 "$MAKEOPTS" 也被设置成正确的值。

结束语
   本文已经讲述了很多 bash 编程技术,但是,只触及到 bash 能力的一些皮毛。例如,Gentoo Linux ebuild 产品不仅自动解包和编译每个包,还可以:

  • 如果在 "$DISTDIR" 没找到源代码,则自动下载
  • 通过使用 MD5 消息摘要,验证源代码没有受到破坏
  • 如果请求,则将编译过的应用程序安装到正在使用的文件系统,并记录所有安装的文件,以便日后可以方便地将包卸载。
  • 如果请求,则将编译过的应用程序打包成 tar 压缩包(以您希望的形式压缩),以便以后可以在另一台计算机上,或者在基于 CD 的安装过程中(如果在构建发行版 CD)安装。


另外,ebuild 系统产品还有几个全局配置选项,允许用户指定选项,例如在编译过程中使用什么优化标志,在那些支持它的包中是否应该缺省启用可选的包支持(例如 GNOME 和 slang)。

显然,bash 可以实现的功能远比本系列文章中所触及的要多。关于这个不可思议的工具,希望您已经学到了很多,并鼓舞您使用 bash 来加快和增强开发项目。

上一页  1 2 3 4 5 

Tags:Bash 实例 探讨

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接