2017-03-09 71 views
0

我想让我的以下脚本与其他平台(UNIX)兼容,我不知道它是否会。特别是[[test]]和%%#符号是兼容的。这个脚本至少可以在linux上正常工作。linux脚本 - 子字符串和附加兼容性与unix

如果有人(熟悉unix)可以提出一些建议或修复以使脚本跨平台(Windows除外)可移植,那将会很棒。

#!/bin/sh 


INSTALL_HOME=/opt/prod/install0308 
export INSTALL_HOME 

export CONF_INSTALL_ARGS="-Dinstall.ext.dir=/opt/prod/installExt -Dinstall.alternateExtDir=/opt/dev/installExt/lib -Dinstall.type=OSD" 



INSTALL_ALTERNATIVE_TYPES_DIR='' 

if [[ ${CONF_INSTALL_ARGS} == *'-Dinstall.alternateExtDir'* ]]; then 
    INSTALL_ALT_TYPE_DIR_TEMP=${CONF_INSTALL_ARGS#*-Dinstall.alternateExtDir=} 
    INSTALL_TYPE_DIR=${INSTALL_ALT_TYPE_DIR_TEMP%%-D*} 
    FINAL_INST_TYPE_DIR="$(echo -e "${INSTALL_TYPE_DIR}" | sed 's/ *$//g')" 
    INSTALL_ALTERNATIVE_TYPES_DIR=','$FINAL_INST_TYPE_DIR 
fi 

TOTAL_CONF_ARGS="-Dinstall.ext.dir=${INSTALL_HOME}/lib/provider,${INSTALL_HOME}/lib/security${INSTALL_ALTERNATIVE_TYPES_DIR}" 

echo $TOTAL_CONF_ARGS 
+0

即使在Linux下也不兼容。您的脚本以'#!/ bin/sh'开头,它将运行POSIX shell或以POSIX兼容模式运行bash,并且您的条件使用'[[...]]',一个不是部分的bash主题的POSIX。参数扩展 - '%%'和'#'应该没问题(这些非常普遍)。在其他平台上查看[sh的手册页](https://www.freebsd.org/cgi/man.cgi?query=sh),以查看可用的类型。并在http://shellcheck.net/上测试您的脚本。 – ghoti

回答

0

这不是操作系统之间的兼容性问题,这是Shells之间的兼容性问题。

您的脚本已为bash类似的贝壳写的,所以你只需要更换的第一行#!/bin/sh通过#!/bin/bash(或者bash位于任何路径)为它在其他系统上运行(不要忘记安装bash在他们)。

注:此脚本适用于您的Linux与家当#!/bin/sh可能是因为你的Linux发行版选择了一个链接,以取代传统的shbash,或者你正在运行的明确使用bash脚本是这样的:bash ./script.sh