kshで最後に実行されたコマンドラインを取得する

kshで最後に実行されたコマンドラインを取得する

kshスクリプトで最後に実行されたコマンドとパラメータを取得する方法はありますか?私はcygwinでmkshを使用しています。

試みましたが、fc -nl -1スクリプトで「fc:履歴機能が利用できません」というエラーが発生しました。

BASH_COMMANDkshでは、この変数に対応するエントリを見ることはできません。

以下はスクリプトから抜粋したものです。

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スクリプトが破損する可能性があります。

おすすめ記事