2017-03-09 6 views
0

私の次のスクリプトを他のプラットフォーム(unix)と互換性があるようにしようとしています。特に、[[test]]と%%#記号は互換性があります。リースでは、このスクリプトはLinux上で正常に動作します。linuxスクリプト - 部分文字列とUNIXとの互換性を追加する

誰か(UNIXに精通している人)が、次のスクリプトをプラットフォーム間で移植できるようにするには、いくつかの提案や修正ができれば幸いです。

#!/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でも互換性がありません。あなたのスクリプトはPOSIXシェルを実行するか、POSIX互換モードでbashを実行する '#!/ bin/sh'で始まり、条件には' '[...]]'を使用します。 POSIXのパラメータ拡張 - %% 'と'# 'はうまくいくはずです(これらはかなり普遍的です)。他のプラットフォームで[shのマニュアルページ](https://www.freebsd.org/cgi/man.cgi?query=sh)を見て、利用可能なものがあるかどうかを確認してください。また、http://shellcheck.net/でスクリプトをテストしてください。 – ghoti

答えて

0

これは、オペレーティングシステム間の互換性の問題ではありません、これはShells間の互換性の問題があります。

あなたのスクリプトはbashのようなシェルのために書かれているので、あなたはそれが他のシステム上で動作するため、最初の行#!/bin/bashによって#!/bin/sh(またはbashが配置されている任意のパス)を交換する必要があります(bashをインストールすることを忘れないでくださいそれらの上に)。

NB:bash ./script.sh:Linuxディストリビューションは、bashへのリンクにより、従来shを交換することを選択したか、明示的にこのようなbashのでスクリプトを実行しているため、このスクリプトはシェバングおそらく#!/bin/shであなたのLinux上で動作します。

関連する問題