有没有办法获取最后执行的命令以及 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 脚本。