运行32位或64位二进制文件的主要问题,具体取决于当前平台。我有一组预定义的平台(正好是2:32和64位Debian,都运行64位内核,但所有用户空间分别是32位或64位)和> 100个平台特定的二进制文件。所有这些二进制文件都是从我的包装器脚本调用的,它对所有这些都是相同的。
我有2个目录:bin和tmp。在bin中有包装脚本和脚本本身的链接。在tmp中有2个目录:32和64.在这些目录中放置可执行文件和库。
我编写了以下依赖于由Bash环境变量HOSTTYPE
导出的脚本:
#!/bin/bash
executable=`basename $0`
tmp_path=$(readlink -f $(dirname $(readlink -f $0))/../tmp)
case "$HOSTTYPE" in
i?86 )
export LD_LIBRARY_PATH="$tmp_path/32:$LD_LIBRARY_PATH"
exec "$tmp_path/32/$executable" $@
;;
x86_64 )
export LD_LIBRARY_PATH="$tmp_path/64:$LD_LIBRARY_PATH"
exec "$tmp_path/64/$executable" $@
;;
* )
echo "Unknown host type: '$HOSTTYPE'"
;;
esac
大部分时间它按预期工作,但是当应该引用的参数被传递时它会被破坏。例如,一个电话
./some_binary --argument="\t" filename
其中\t
是制表符。该脚本接收预解释的参数列表:
./some_binary --argument=\t filename
然后在exec中再次重新解释为
../tmp/32/some_binary --argument= filename
被追查的标签丢失了。我怎么能阻止这个?或者我应该以完全不同的方式解决我的主要问题?