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.