kshスクリプトで最後に実行されたコマンドとパラメータを取得する方法はありますか?私はcygwinでmkshを使用しています。
試みましたが、fc -nl -1
スクリプトで「fc:履歴機能が利用できません」というエラーが発生しました。
BASH_COMMAND
kshでは、この変数に対応するエントリを見ることはできません。
以下はスクリプトから抜粋したものです。
function trapper ()
{
printf "culprit: "
fc -nl -1
}
trap trapper ERR
grep -ic textdoesntexist test3
grepが1を返すとトラップが実行されますが、fc:History function availableエラーが発生します。
〜のようにリーが指摘した、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
。名前から推測できるように、スクリプトは別の方法で(より効率的に)解析されるため、スクリプトでは機能しません。
通常、スクリプトでは次のことができます。いつもとにかく、最後の行を知ってください;)
対話型シェルの履歴にアクセスする必要がある場合は、エイリアスを定義するか、.profile
またはで関数を定義することをお勧めします.mkshrc
。
場合によっては、次の明示的なエラー処理を使用することをお勧めします。
grep -ic textdoesntexist test3 || die 'Could not grep in test3'
そしてお願いします 本物GNU bash互換性イディオム「&>
リダイレクト演算子として使用」を使用しないでください。これは新しいスクリプトではなく互換性のみを目的としており、パターンから-o posix
失われました。これを解析すると、既存の有効なPOSIXスクリプトが破損する可能性があります。