diff --git a/lib/general.sh b/lib/general.sh index 23c6033d..25238bb1 100644 --- a/lib/general.sh +++ b/lib/general.sh @@ -1,11 +1,11 @@ #shellcheck shell=sh disable=SC2004,SC2016 -# Workaround for ksh 2020 -if [ "${KSH_VERSION:-}" ]; then +# Workaround for ksh 2020: Heisenbug +case "${KSH_VERSION:-}" in (*2020*) ( exec 3>/dev/null 4>&3 5>&3 6>&3 7>&3 8>&3 9>&3 eval "dummy() { $(printf %8192s :); }" ) 3>&- 4>&- 5>&- 6>&- 7>&- 8>&- 9>&- -fi +esac : "${SHELLSPEC_SHELL_TYPE:=}" "${SHELLSPEC_SHELL_VERSION:=}" SHELLSPEC_SH_VERSION=$(eval 'echo "${.sh.version}"' 2>/dev/null) ||: diff --git a/libexec/shellspec-translate.sh b/libexec/shellspec-translate.sh index 47f7b6cb..82b1a886 100755 --- a/libexec/shellspec-translate.sh +++ b/libexec/shellspec-translate.sh @@ -9,6 +9,11 @@ use escape_quote delimiter="DELIMITER-$SHELLSPEC_UNIXTIME-$$" +disable_virtual_subshell() { + [ "$SHELLSPEC_SHELL_TYPE" = ksh ] || return 0 + putsn 'ulimit -t $(ulimit -t)' +} + trans() { # shellcheck disable=SC2145 "trans_$@" @@ -16,6 +21,7 @@ trans() { trans_block_example_group() { putsn "(" + disable_virtual_subshell [ "$skipped" ] && trans_skip "" putsn "shellspec_group_id $block_id $block_no" putsn "SHELLSPEC_LINENO_BEGIN=$lineno_begin" @@ -28,6 +34,7 @@ trans_block_example_group() { trans_block_example() { putsn "(" + disable_virtual_subshell [ "$skipped" ] && trans_skip "" putsn "shellspec_example_id $block_id $example_no $block_no" putsn "SHELLSPEC_LINENO_BEGIN=$lineno_begin"