取得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 腳本。

相關內容