Bagaimana saya bisa `alias sudo !!`?


50

Saya mencoba menetapkan alias untuk sudo !!di Bash. Saya mencoba alias sbb='sudo !!', tetapi itu menafsirkannya sebagai huruf !!dan cetakan

sudo: !!: command not found

Jika saya menggunakan tanda kutip ganda, itu menggantikan bang ganda dalam string itu sendiri, sehingga tidak berfungsi.

Apakah ada cara untuk membuat ini berfungsi? Atau alias alternatif? `



Jawaban:


61

!!diperluas oleh bash saat Anda mengetiknya. Itu tidak diperluas dengan substitusi alias.

Anda dapat menggunakan historybuilt-in untuk melakukan ekspansi:

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

Jika perintah lebih dari sekadar perintah sederhana (mis. Perintah ini berisi pengalihan atau pipa), Anda perlu menjalankan shell di bawah sudo:

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

Punya satu untuk tcsh?
mdpc

1
@mdpc: Saya tidak menggunakan tcsh, tapi aku melirik man tcshdan menemukan bahwa itu tidak melakukan ekspansi sejarah selama ekspansi alias "seolah-olah perintah asli adalah garis masukan sebelumnya." Menarik. Namun, alias sbb 'sudo \!-2tidak berfungsi seperti yang diharapkan (itu sebenarnya menggantikan entri kedua sebelumnya); alias sbb 'sudo \!\!'berhasil seperti yang diharapkan (diganti sbbuntuk !!); dan pada akhirnya ternyata apa yang saya inginkan adalah alias sbb 'sudo \!-1'yang saya harapkan akan sama dengan \!\!. (tcsh 6.17.06 (Astron) 2011-04-15) YMMV. Semoga berhasil.
rici

Terima kasih! Alias ​​ini bagus ketika sebagai administrator Anda lupa meletakkan sudo di depan perintah Anda.
mdpc

bukannya sbbsaya lebih suka preasesebagai alias seperti yang disarankan oleh @jpschorr
rubo77

40

Mencoba:

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

Saya suka sebenarnya lebih suka memberi nama 'tolong':

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

Info: fcadalah perintah bawaan pada bash shell. yang mencantumkan, mengedit, dan menjalankan kembali perintah yang sebelumnya dimasukkan ke shell interaktif.


13
pleasejelas merupakan cara untuk pergi!
Anto

berfungsi untuk bash juga menghapus komentar 'untuk zsh'.
Michael Durrant

1
Bekerja dengan baik di zsh. fc adalah perintah untuk digunakan. Terima kasih
Frax

pleasemembuatnya terasa seperti terminal adalah suatu entitas yang saya harus bersikap baik untuk menyelesaikan sesuatu. Saya lebih suka sesuatu yang memberikan rasa kontrol yang lebih baik - seperti fuck;)
Przemek D


0

Ini awalnya diposting pada pertanyaan ini tetapi kemudian, disarankan untuk memposting di sini.

Inilah cara Anda dapat menggunakan fcdan historydengan alias untuk !-pengganti sejenis. Misalkan jika Anda ingin menggunakan !-n(di mana n adalah digit untuk n th perintah terakhir digunakan), maka Anda dapat menggunakan fcdan historydengan alias sebagai berikut:

  1. Menggunakan history:

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

    Catatan: Di sini !-nharus dilampirkan dengan 'atau ''.

  2. Menggunakan fc:

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

    Catatan: di sini 1 st dan 2 nd -n digunakan untuk menentukan kisaran daftar sejarah.

Di sini saya menggunakan gema sebelum mengeksekusi perintah untuk felling like !-<n>.


Jawaban sebelumnya sudah mencakup history -pdan fc. Ada yang baru di sini?
muru

Ok, bagaimana dengan itu?
muru

Saya menemukan itu -ln -n -nmenjadi sangat membingungkan; juga sedikit tentang 'atau ''(dan juga sedikit tentang -<n>).
Scott

Opsi 2. harus salah ketik, saya pikir Anda ingin$(fc -ln -1)
cmcginty

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.