当我有几个要设置的变量时,我编写了一个包装器脚本,然后我将其用作我想要修改的命令的前缀.这让我也可以使用前缀
>应用于单个命令,例如make,或
>初始化shell,以便后续命令使用更改的设置.
我用包装纸
>设置编译器选项(例如clang,设置CC变量,使配置脚本“看到”它作为选择的编译器),
>设置区域设置变量,使用POSIX C与en_US和en_US.UTF-8等进行测试.
>在减少的环境中进行测试,例如在cron中.
每个包装器都会执行识别正确PATH,LD_LIBRARY_PATH和类似变量所需的内容.
例如,我在大约十年前编写了这个特殊脚本来测试本地构建的python:
#!/bin/bash
ver=2.4.2
export TOP=/usr/local/python-$ver
export PATH=$TOP/bin:$PATH
export LD_LIBRARY_PATH=`newpath -n LD_LIBRARY_PATH -bd $TOP/lib $TOP/lib/gcc/i686-pc-linux-gnu/$ver`
if test -d $TOP
then
exec $*
else
echo no $TOP
exit 1
fi
并将其用作-python-2.4.2 myscript.
一些包装器只是调用另一个脚本.
例如,我在configure脚本周围使用这个包装器来设置交叉编译的变量:
#!/bin/sh
# $Id: cfg-mingw,v 1.7 2014/09/20 20:49:31 tom Exp $
# configure to cross-compile using mingw32
BUILD_CC=${CC:-gcc}
unset CC
unset CXX
TARGET=`choose-mingw32`
if test -n "$TARGET"
then
PREFIX=
test -d /usr/$TARGET && PREFIX="--prefix=/usr/$TARGET"
cfg-normal \
--with-build-cc=$BUILD_CC \
--host=$TARGET \
--target=$TARGET \
$PREFIX "$@"
else
echo "? cannot find MinGW compiler in path"
exit 1
fi
其中choose-mingw32和cfg-normal是脚本,它们(a)找到交叉编译器的可用目标名称,以及(b)为configure脚本提供其他选项.
其他人可能会建议shell别名或函数.我没有为此目的使用它们,因为我的命令行shell通常是tcsh,而我从(a)其他shell脚本,(b)directory editor或(c)text-editor运行这些命令.那些使用POSIX shell(除了当然,对于需要特定功能的脚本),制作少量使用的别名或功能.