web-dev-qa-db-ja.com

「エイリアスSudo !!」

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

Sudo: !!: command not found

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

これを機能させる方法はありますか?または代替エイリアス? `

53
Manishearth

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

historyビルトインを使用して展開できます:

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

コマンドが単純なコマンドではない場合(たとえば、リダイレクトまたはパイプが含まれている場合)、Sudoでシェルを呼び出す必要があります。

alias sbb='Sudo "$BASH" -c "$(history -p !!)"'
63
rici

試してください:

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

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

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

情報:fc は、bashシェルに組み込まれたコマンドです。以前にインタラクティブシェルに入力したコマンドを一覧表示、編集、再実行します。

41
jpschorr

GitHubにはこの目的のためのリポジトリがあり、スーパーユーザー権限が必要かどうかを魔法のようにチェックし、タイプミスも修正しています。

https://github.com/nvbn/thefuck

5
Arda

これは元々 this の質問に投稿されていましたが、後でここに投稿するよう提案されました。

ここでは、fchistory!-のような置換のエイリアスとともに使用する方法を示します。 !-nを使用する場合を想定します(nはnの数字です番目 最後に使用したコマンド)、次にfchistoryをエイリアスで次のように使用できます:

  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)'
    

    注:ここ1st と2nd -nは、履歴リストの範囲を指定するために使用されます。

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

0
Pandya