获取ksh中最后执行的命令行

获取ksh中最后执行的命令行

有没有办法获取最后执行的命令以及 ksh 脚本中的参数?我正在将 mksh 与 cygwin 一起使用。

我尝试过fc -nl -1,但脚本抛出“”fc:历史函数不可用”错误。

BASH_COMMAND我在 ksh 中没有看到该变量的等效项。

以下是脚本的摘录:

function trapper ()
{
  printf "culprit: "
  fc -nl -1
}

trap trapper ERR

grep -ic textdoesntexist test3

一旦 grep 返回 1 , trapper 就会执行,但我收到一个 fc: 历史函数不可用 错误。

作为李指出hist可能有用,但它是仅适用于 ksh93,我不被允许使用。

我尝试将命令行字符串存储在变量中,并在捕获器函数中使用该变量。

function err_handler
{
        echo "ERR in ${cmd} trapped"
        cmd=
        return 0
}

trap err_handler EXIT ERR

cmd="grep -ic testdoesntexist test3"
${cmd} &>/dev/null

它确实有效,但我觉得它很难看。还有更好的出路吗?

答案1

mksh作者在这里☻

内置fc实用程序访问交互式命令行历史记录。正如您可能已经从名称中猜到的那样,这不适用于脚本,因为它们的解析方式不同(效率更高)。

一般来说,在脚本中,您可以总是无论如何,知道最后一行;)

如果您需要访问交互式 shell 的历史记录,请定义别名,或者最好在.profile或中定义一个函数.mkshrc

在您的具体情况下,我建议使用显式错误处理,例如:

grep -ic textdoesntexist test3 || die 'Could not grep in test3'

真的避免使用 GNU bash 兼容性习惯用法“&>用作重定向运算符”;它只是为了兼容性,而不是新脚本,并且-o posix已经在模式中消失了。解析它可能会破坏现有的有效 POSIX 脚本。

相关内容