Bashの履歴から一連のコマンドを実行するショートカットはありますか?

Bashの履歴から一連のコマンドを実行するショートカットはありますか?

私のファイルに次の簡単な例があるとしましょうhistory

...
76 cd ~
77 ./generator.sh out.file
78 cp out.file ~/out/
79 ./out/cleaner.sh .
80 ls -alnh /out
...

77、、78コマンドを1つのコマンドで実行したい場合は、ショートカットキーは79ありますか?私はこれを試してみましたが、!77 !78 !79これは単に1行ですべて実行されます。

ベストアンサー1

編集:POSIX互換方式を使用してこれを行うことができます。修理コマンドツールfc:

fc 77 79

viこれにより、バッファ内のコマンド77〜79を含むエディタ(おそらく)が開きます。保存して終了すると():xコマンドが実行されます。


編集したくなく、どのコマンドが呼び出されるのかをよく知っている場合は、次のことを使用できます。

fc -e true 77 79

コマンドを編集する「エディタ」として使用されるため、true変更せずに終了し、コマンドはそのまま実行されます。


元の答え:

あなたはそれを使用することができます:

history -p \!{77..79} | bash

これは、現在の実行環境にのみ存在するエイリアス、関数、または変数を使用しないと仮定します。もちろん、起動する新しいシェルではこれらのエントリが利用できないためです。


より良い解決策は次のとおりです(コメントで教えてくれたMichael Hoffmanに感謝します)。

eval "$(history -p \!{77..79})"

実際にフィットする非常にまれな状況の一つですeval


また見なさい:

おすすめ記事