Bashと感嘆符コマンド、実行前に実際のコマンドをプレビューしますか?

Bashと感嘆符コマンド、実行前に実際のコマンドをプレビューしますか?

!文字列の前にプレフィックスを付けると、その文字列の一部で始まるコマンドバッファ内のすべてのコマンドが実行されます。また、他の用途もあります。たとえば、参照してください。Bashの感嘆符(!)を理解する

私の質問は、実行されるコマンドを実行する前にどのようにプレビューできるかということです。たとえば、これを実行して!for以前に「for」で始まる複数のコマンドを作成した場合、最後のコマンドだと思ったコマンドが実際にそう思ったコマンドであるかどうかは完全にはわかりません。 bashが実際にコマンドを実行する前にコマンドが何であるかを示すことができれば、非常に役立ちます。 Bashでこれを行う方法はありますか?

答え1

Bashはを継承します!csh両方のシェルでコマンドをプレビューする方法は、:p最後に を追加することです。

!for:p

答え2

histverifyシェルオプションが利用可能です。

histverify
    If set, and readline is being used, the results of history substitution
    are not immediately passed to the shell parser.  Instead,
    the resulting line is loaded into the readline editing buffer,
    allowing further modification.

例:

$ shopt -s histverify
$ !shopt

別の便利なオプションは次のとおりですhistreedit

histreedit
    If set, and readline is being used, a user is given the opportunity
    to re-edit a failed history substitution.

答え3

私は一般的に(IMOが壊れている)!置換を放棄し、代わりにシェル履歴機能を使用します。viモード(以下では間違いなく同等のオプションを見つけることができます。Emacsモード)最後の項目を検索し<Esc> / for <Enter>(必要なコマンドではない場合)、そのforキーを使用して次の項目の検索を繰り返しn(またはN別の方向に移動)、目的のコマンドが次のものであることを確認します。と同じです<Enter>

答え4

viモード()を使用している場合、または、またはを押すとset -o vi記録が上になり、またはを押すと下に移動します。を使用して取得した内容を編集または実行できます。EscC-[kUPjDOWNEnter

関連情報