エイリアスsudo !! `


50

sudo !!Bashでエイリアスを設定しようとしています。私はalias sbb='sudo !!' を試しましたが、それをリテラルとして解釈し !!、印刷します

sudo: !!: command not found

二重引用符を使用すると、文字列自体に二重バングが置換されるため、機能しません。

この作業を行う方法はありますか?または別のエイリアスですか?`



回答:


61

!!入力するとbashによって展開されます。エイリアス置換によって拡張されません。

history組み込みを使用して拡張を実行できます。

alias sbb='sudo $(history -p !!)'

コマンドが単純なコマンド(たとえば、リダイレクトやパイプを含む)以上の場合、sudoでシェルを呼び出す必要があります。

alias sbb='sudo "$BASH" -c "$(history -p !!)"'

tcshを入手しましたか?
mdpc

1
@mdpc:tcshは使用man tcshしていませんが、エイリアスを展開している間、「元のコマンドが前の入力行であるかのように」履歴展開を行うことを確認しました。面白い。ただし、alias sbb 'sudo \!-2期待どおりに機能しませんでした(実際に2番目の前のエントリを置き換えました)。alias sbb 'sudo \!\!'期待どおりに動作しました(の代わりsbb!!); そして最終的に私が欲しかったのはalias sbb 'sudo \!-1'私が同じであると予想していたことであることが判明しました\!\!。(tcsh 6.17.06(Astron)2011-04-15)YMMV。幸運を。
リチ

ありがとう!このエイリアスは、管理者としてsudoをコマンドの前に置くのを忘れたときに便利です。
mdpc

代わりに、@ jpschorrsbbprease
rubo77

40

試してください:

alias sbb='sudo $(fc -ln -1)'

私は実際に「してください」という名前を好むのが好きです:

alias please='sudo $(fc -ln -1)'

情報:fcbashシェルの組み込みコマンドです。以前に対話型シェルに入力されたコマンドをリスト、編集、および再実行します。


13
please間違いなく行く方法です!
アント

bashでも機能するため、「for zsh」コメントを削除しました。
マイケルデュラント

1
zshでうまく機能します。fcは使用するコマンドです。おかげで
FRAX

please端末が何かを成し遂げるために私が親切にしなければならないエンティティであるように感じさせます。私はより良いコントロール感を与えるものが好きfuckです
Przemek D


0

これはもともとこの質問で投稿されましたが、後で、ここに投稿することを提案しました。

ここでは、使用する方法であるfchistoryの別名で!-の置換などがあります。あなたが使用する場合とし!-n(ここで、nはのための数字nは番目の使用最後のコマンド)、その後、あなたが使用することができますfcし、history次のようにエイリアスを持ちます:

  1. を使用してhistory

    alias xyz='echo $(history -p "!-<n>") ; sudo $(history -p "!-n")'

    注:ここ!-n'またはで囲む必要があります''

  2. を使用してfc

    alias xyz='echo $(fc -ln -n -n) ; sudo $(fc -ln -n -n)'

    注:ここでは1 回目と2 回目 -nの履歴リストの範囲を指定するために使用されています。

ここでは、のような伐採のコマンドを実行する前にエコーを使用しました!-<n>


以前の回答はすでにをカバーhistory -pしていfcます。ここで何か新しいことはありますか?
ムル

わかりました、それは何ですか?
ムル

私は-ln -n -n非常に混乱していることがわかりました。'またはについてのビット''(およびについてのビットも-<n>)。
スコット

オプション2.タイプミスである必要があります、私はあなたが欲しいと思う$(fc -ln -1)
-cmcginty

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.