履歴で最後に実行されたコマンドを文字列として取得し、bashの変数に保存します。

履歴で最後に実行されたコマンドを文字列として取得し、bashの変数に保存します。

最後に実行されたコマンドとオプションを取得し、ファイルに書き込む文字列として保存しようとしています。試してみましたが、fc次のコマンドのみが提供されます(とにかく私にとっては)。また、入力時に正しいコマンドを提供しようとしましたが、!!:p関数自体内で動作させることはできないようです。これを完了できますか?

これが起こったことです。arg私が欲しい文字列です。

#!/bin/bash                                                                     

foo(){
    read HISTNUMVAR < histnum.txt
    TEMPHNV=$(fc -l 0 | grep -o '^[0-9]*');
    if [ $TEMPHNV -ne $HISTNUMVAR ]; then
        arg=$(***last history command here***);
        ./write_arg_to_file.sh $arg;
    fi
    echo $TEMPHNV > histnum.txt;
}

このスクリプトは、正しいコマンド履歴を取得するだけでなく、必要なすべての操作を実行します。

答え1

よりきちんとした方法があるかもしれませんが、以下を使用して履歴から前のコマンドをインポートできます。

prev=$(fc -ln | tail -2 | head -1)

答え2

私はいくつかのことを処理できました。コマンドラインで次を使用します。

history 2 | sed 's/^ *[^ ]* *//' | cut -d$'\n' -f1

スクリプト内で使用されます。

arg=$(history 1 | sed 's/^ *[^ ]* *//')

これにより、コマンドとすべてのオプションが文字列として正常に保存されます。

答え3

非対話型の使用ではデフォルトで無効になっているため、スクリプトで履歴拡張を有効にする必要がある場合があります。set -Hこれで問題が解決します。

テストされていませんが、これはうまくいくとarg="!!"思います。

関連情報