未更改的shell脚本参数传播

时间:2015-03-23 16:23:16

标签: linux bash shell

运行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

被追查的标签丢失了。我怎么能阻止这个?或者我应该以完全不同的方式解决我的主要问题?

0 个答案:

没有答案