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: history functions not available 錯誤。
正如Lee 所指出的,
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
它有效,但我覺得它很醜陋。有沒有更好的出路?
mksh
作者在這裡☻
fc
內置實用程序訪問互動式命令行歷史記錄。正如您可能已經從名稱中猜到的那樣,這不適用於腳本,因為它們的解析方式不同(效率更高)。一般來說,在腳本中,無論如何,你總是可以知道最後一行;)
如果您需要訪問互動式 shell 的歷史記錄,請定義一個別名,或者最好在
.profile
or中定義一個函式.mkshrc
。在您的特定情況下,我建議使用顯式錯誤處理,例如:
grep -ic textdoesntexist test3 || die 'Could not grep in test3'
並且請 真正避免使用 GNU bash 兼容性習慣用法
&>
作為重定向運算符;-o posix
它只是為了兼容性,而不是新腳本,並且已經在模式下消失了。解析它可能會破壞現有的有效 POSIX 腳本。