Linux bash—自动编译的正确方法

Linux bash—自动编译的正确方法,linux,bash,Linux,Bash,我试图在CentOS下自动编译Mono,为此我编写了一个bash脚本。但我对这方面还很陌生,我不确定这里的最佳实践是什么 这就是我的脚本现在的样子: # Variables monoRepoUrl='http://download.mono-project.com/sources/mono' monoPackageName='mono-2.10.8' monoSubdir=$monoPackageName srcDirectory='/usr/local/src'/$monoSubdir m

我试图在CentOS下自动编译Mono,为此我编写了一个bash脚本。但我对这方面还很陌生,我不确定这里的最佳实践是什么

这就是我的脚本现在的样子:

# Variables
monoRepoUrl='http://download.mono-project.com/sources/mono'

monoPackageName='mono-2.10.8'
monoSubdir=$monoPackageName
srcDirectory='/usr/local/src'/$monoSubdir

monoUrl=$monoRepoUrl'/'$monoSubdir'/'$monoPackageName".tar.bz2"

# Prepare environment
echo ''
echo 'Installing pre-requisites packages'
echo ''
yum -y install gcc-c++ make httpd-devel gettext bison


######### Mono core stuff #########
echo ''
echo 'Getting Mono'
echo ''
wget $monoUrl
tar jxvf $monoPackageName.tar.bz2

$srcDirectory/configure -prefix=/opt/$monoPackageName; $srcDirectory/make; $srcDirectory/make install
echo export PKG_CONFIG_PATH=/opt/$monoPackageName/lib/pkgconfig:$PKG_CONFIG_PATH>>~/.bash_profile
echo export PATH=/opt/$monoPackageName/bin:$PATH>>~/.bash_profile
source ~/.bash_profile

echo ''
echo 'End of Mono installation'
echo ''
然而,我在这里遇到的问题是目录的更改不起作用-脚本似乎有自己的过程。保持简单(例如,除非绝对必要,否则我宁愿不使用函数),做这件事的更优雅的方式是什么


在任何地方使用绝对路径都有效吗?bash中这种情况的最佳实践是什么?

如果您正在编写bash脚本,请确保始终使用绝对路径,bash不会接受或读取相对路径。由于您是新手,请确保您还指定了命令的绝对路径,例如,仅yum有时可能无法工作。检查哪个yum首先获得yum的绝对路径,并在bash脚本中指定绝对路径。同时确保您也为脚本授予了执行权限

通常,运行GNU
Make
之类的生成器要比创建
bash
脚本好得多。而
mono
最好通过发行版的包装系统安装(例如
dpkg
apt-get
aptitude
…在Debian、Mint或Ubuntu上,或
yum
在Fedora或Redhat上)。我看不到你在哪里更改目录。Basile:CentOS上绝对没有mono的回购,这就是为什么我首先需要编译它。改变操作系统不是一个选项。但是你可以改为为为CentOS打包Mono(如果可能的话,将其贡献给发行版)。因此,请先了解如何在CentOS中执行软件包。Joni:我删除了cd命令,因为它没有用,因为它没有真正工作。-1因为
bash
在处理路径方面并不特殊。它使用
execvp
(或一些内部等效项),例如
PATH
环境变量。而
PATH
可能包含相对目录(即使这通常是不好的做法)。如果需要,shell脚本甚至可以更改自己的
路径。