このbashエイリアスは、前のコマンドをsudoでどのように繰り返すのですか? [コピー]

このbashエイリアスは、前のコマンドをsudoでどのように繰り返すのですか? [コピー]

私は最近発行された最後のコマンドをsudoで繰り返すためにこの賢いbashエイリアスを見つけました。sudo !!コマンドが失敗した後は、端末で直接を使用してこれを実行できます。

私が見つけたエイリアスはalias mycmd='sudo $(history -p \!\!)'

これがどのように機能するのかよくわかりません。

答え1

$(history -p \!\!)履歴に再度追加せずに最後に実行されたコマンドを取得する方法。からhelp history

  -p    perform history expansion on each ARG and display the result
    without storing it in the history list

Bashでは、!!最後に実行されたコマンドまで拡張されますが、この拡張はエイリアス拡張の前に実行されるため、エイリアスでは直接使用できません。 (歴史的拡張は最も初期の拡張の1つです。これは支柱の拡張前にも発生しました(例:通常最初).)

したがって、最後に実行されたコマンドを取得するには、どの方法を使用する必要があります。これは、シェル方式を拡張した をhistory -p使用して行うことができます。!!

なぜ逃げたのか分からないけど!。私にはバックスラッシュがなくてもうまくいきます。

関連情報