有沒有辦法取得最後執行的命令以及 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 腳本。