0

私は次の問題を抱えています:

  • 以前にkshで実行されたテストスクリプトがいくつかあります(MKS Toolkitから)
  • スクリプトは変更しないでおく必要があります(1文字も変更されません)。
  • これらのスクリプトを実行するには、(Mingw / Msysの)bashを使用します。

問題は次のとおりです。

これはKornShell(ksh)では正常に機能しますが、bashでは機能しません。

typeset -i errorCode
errorCode=10
exit errorCode

次のようにスクリプトを変更する必要があります($記号に注意してください)。

typeset -i errorCode
errorCode=10
exit $errorCode

私が言及した変更を行わずに、コードをbashでコンパイルできるようにする方法はありますか?

ありがとう

4

2 に答える 2

1

bashでkshスクリプトを実行する前にこれを行うこともできます

#!/bin/bash
exit ()
{
    unset -f exit
    if expr match "$1" '^[-|+|0-9|.][.0-9]*$' &> /dev/null ; then
            exit "$1"
    fi
    exit
}
source ./the_ksh_script

出口をオーバーライドします。この例は元のコードと互換性があります。つまり、終了コードは 0 です。

2 番目の例

exit () {
 unset -f exit
 eval rc2=\$$1
 rc1=$1
 for rc in "$rc1" "$rc2"
  do
   if expr match "$rc" '^[-|+|0-9|.][.0-9]*$' &> /dev/null ; then
    exit "$rc"
   fi
  done
 exit
}

source ./the_ksh_script

終了コード 10 が生成されますが、これはおそらく元のスクリプトが意図したものです。

于 2012-06-01T16:57:38.823 に答える