![このbashエイリアスは、前のコマンドをsudoでどのように繰り返すのですか? [コピー]](https://linux33.com/image/60608/%E3%81%93%E3%81%AEbash%E3%82%A8%E3%82%A4%E3%83%AA%E3%82%A2%E3%82%B9%E3%81%AF%E3%80%81%E5%89%8D%E3%81%AE%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%82%92sudo%E3%81%A7%E3%81%A9%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E7%B9%B0%E3%82%8A%E8%BF%94%E3%81%99%E3%81%AE%E3%81%A7%E3%81%99%E3%81%8B%EF%BC%9F%20%5B%E3%82%B3%E3%83%94%E3%83%BC%5D.png)
私は最近発行された最後のコマンドを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
使用して行うことができます。!!
なぜ逃げたのか分からないけど!
。私にはバックスラッシュがなくてもうまくいきます。