0

我有以下问题:

  • 我有一些以前使用 ksh 运行的测试脚本(来自MKS Toolkit
  • 脚本需要保持不变(不会更改单个字符)。
  • 我将使用 bash(来自 Mingw/Msys)来运行这些脚本。

问题如下:

这在 KornShell (ksh) 中工作正常,但在 bash 中不起作用:

typeset -i errorCode
errorCode=10
exit errorCode

我需要像这样修改脚本(注意 $ 符号):

typeset -i errorCode
errorCode=10
exit $errorCode

有没有办法使代码可以用 bash 编译,而无需进行我提到的 chnage?

谢谢

4

2 回答 2

4

假设您的代码位于名为foo.sh的文件中,您可以使用进程替换来包装它。例如:

bash <(sed 's/errorCode$/$&/' foo.sh)

Bash 将修改后的代码解释为从文件描述符中读取,并且子shell 的退出状态按预期设置。

$ echo $?
10
于 2012-06-01T07:58:32.237 回答
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。

第二个例子

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 回答