使用! ! bash関数の中で

使用! ! bash関数の中で

.bashrc履歴から前のコマンドを再実行し、キャプチャされた出力に役立つタスクを実行するbash関数を作成しようとしています。

my_function() {
  output=$(!!)
  # Do something with output
}

(状態:bash: !!: command not foundコマンドとシェル組み込み機能の間に違いがあることはわかっていますが、関数またはそれに対応する機能(存在する場合)でこの組み込み機能を実行する方法はわかりません。bash関数の以前のシェル注文?

答え1

あなたはそうすることはできません。エイリアス拡張と同様に、コマンド履歴拡張は、関数が使用されるときではなく、関数が定義されたときに実行されます。

ただし、組み込み関数を使用して履歴に直接アクセスできますfc

$ redo(){ cmd=$(fc -nl -1 -1); echo "redoing '$cmd'"; eval "$cmd"; }
$ pwd
$ refo
redoing '      pwd'
/home2/ahq

関連情報