我有以下问题:
问题如下:
这在KornShell(ksh)中工作正常,但在bash中不起作用:
typeset -i errorCode
errorCode=10
exit errorCode
我需要像这样修改脚本(注意$符号):
typeset -i errorCode
errorCode=10
exit $errorCode
有没有办法让代码与bash一起编译而不用我提到的chnage?
由于
答案 0 :(得分:4)
假设您的代码位于名为 foo.sh 的文件中,您可以使用进程替换来包装它。例如:
bash <(sed 's/errorCode$/$&/' foo.sh)
Bash将修改后的代码解释为从文件描述符中读取,并且子shell的退出状态按预期设置。
$ echo $?
10
答案 1 :(得分: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,可能是原始脚本的意图。