sudo !!Bashでエイリアスを設定しようとしています。私はalias sbb='sudo !!' を試しましたが、それをリテラルとして解釈し !!、印刷します
sudo: !!: command not found
二重引用符を使用すると、文字列自体に二重バングが置換されるため、機能しません。
この作業を行う方法はありますか?または別のエイリアスですか?`
sudo !!Bashでエイリアスを設定しようとしています。私はalias sbb='sudo !!' を試しましたが、それをリテラルとして解釈し !!、印刷します
sudo: !!: command not found
二重引用符を使用すると、文字列自体に二重バングが置換されるため、機能しません。
この作業を行う方法はありますか?または別のエイリアスですか?`
回答:
!!入力するとbashによって展開されます。エイリアス置換によって拡張されません。
history組み込みを使用して拡張を実行できます。
alias sbb='sudo $(history -p !!)'
コマンドが単純なコマンド(たとえば、リダイレクトやパイプを含む)以上の場合、sudoでシェルを呼び出す必要があります。
alias sbb='sudo "$BASH" -c "$(history -p !!)"'
man tcshしていませんが、エイリアスを展開している間、「元のコマンドが前の入力行であるかのように」履歴展開を行うことを確認しました。面白い。ただし、alias sbb 'sudo \!-2期待どおりに機能しませんでした(実際に2番目の前のエントリを置き換えました)。alias sbb 'sudo \!\!'期待どおりに動作しました(の代わりsbbに!!); そして最終的に私が欲しかったのはalias sbb 'sudo \!-1'私が同じであると予想していたことであることが判明しました\!\!。(tcsh 6.17.06(Astron)2011-04-15)YMMV。幸運を。
sbbprease
試してください:
alias sbb='sudo $(fc -ln -1)'
私は実際に「してください」という名前を好むのが好きです:
alias please='sudo $(fc -ln -1)'
情報:fcbashシェルの組み込みコマンドです。以前に対話型シェルに入力されたコマンドをリスト、編集、および再実行します。
please間違いなく行く方法です!
please端末が何かを成し遂げるために私が親切にしなければならないエンティティであるように感じさせます。私はより良いコントロール感を与えるものが好きfuckです
これはもともとこの質問で投稿されましたが、後で、ここに投稿することを提案しました。
ここでは、使用する方法である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)'
注:ここでは1 回目と2 回目 -nの履歴リストの範囲を指定するために使用されています。
ここでは、のような伐採のコマンドを実行する前にエコーを使用しました!-<n>。
history -pしていfcます。ここで何か新しいことはありますか?
-ln -n -n非常に混乱していることがわかりました。'またはについてのビット''(およびについてのビットも-<n>)。
$(fc -ln -1)
alias please="sudo $(history -p \!\-2)"