BashでSudo !!
のエイリアスを設定しようとしています。私はalias sbb='Sudo !!
'を試しましたが、それはそれをリテラル!!
と解釈して出力します
Sudo: !!: command not found
二重引用符を使用すると、文字列自体の二重のバングが置換されるため、機能しません。
これを機能させる方法はありますか?または代替エイリアス? `
!!
を入力すると、bashによって展開されます。エイリアス置換では拡張されません。
history
ビルトインを使用して展開できます:
alias sbb='Sudo $(history -p !!)'
コマンドが単純なコマンドではない場合(たとえば、リダイレクトまたはパイプが含まれている場合)、Sudoでシェルを呼び出す必要があります。
alias sbb='Sudo "$BASH" -c "$(history -p !!)"'
試してください:
alias sbb='Sudo $(fc -ln -1)'
私は実際にそれを「してください」という名前を好むのが好きです:
alias please='Sudo $(fc -ln -1)'
情報:fc
は、bashシェルに組み込まれたコマンドです。以前にインタラクティブシェルに入力したコマンドを一覧表示、編集、再実行します。
GitHubにはこの目的のためのリポジトリがあり、スーパーユーザー権限が必要かどうかを魔法のようにチェックし、タイプミスも修正しています。
これは元々 this の質問に投稿されていましたが、後でここに投稿するよう提案されました。
ここでは、fc
とhistory
を!-
のような置換のエイリアスとともに使用する方法を示します。 !-n
を使用する場合を想定します(nはnの数字です番目 最後に使用したコマンド)、次にfc
とhistory
をエイリアスで次のように使用できます:
history
を使用:
alias xyz='echo $(history -p "!-<n>") ; Sudo $(history -p "!-n")'
注:ここで!-n
は'
または''
で囲む必要があります。
fc
を使用:
alias xyz='echo $(fc -ln -n -n) ; Sudo $(fc -ln -n -n)'
注:ここ1st と2nd -n
は、履歴リストの範囲を指定するために使用されます。
ここでは、!-<n>
のような伐採のためのコマンドを実行する前にエコーを使用しました。