Nasıl alias sudo !! `yapabilirim?


50

sudo !!Bash için bir takma ad belirlemeye çalışıyorum . Denedim alias sbb='sudo !!', fakat bunu edebi olarak yorumluyor !!ve yazıyor.

sudo: !!: command not found

Çift tırnak kullanırsam, dizedeki çift çarpmanın yerini alır, bu yüzden işe yaramaz.

Bu işi yapmanın bir yolu var mı? Veya alternatif bir takma ad? '



Yanıtlar:


61

!!siz yazdığınızda bash ile genişletilir. Diğer ad değişikliği ile genişletilmez.

historyGenişletme yapmak için yerleşik kullanabilirsiniz :

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

Komut basit bir komuttan fazlaysa (örn. Yönlendirmeler veya borular içeriyorsa), sudo altında bir kabuk çağırmanız gerekir:

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

Tcsh için bir tane var mı?
mdpc

1
@mdpc: Ben tcsh kullanmayın, ama baktı man tcshve onu keşfetti yapar takma genişleme sırasında geçmiş genişleme yapmak "orijinal komut önceki giriş hattı sanki." İlginç. Ancak, alias sbb 'sudo \!-2beklendiği gibi çalışmadı (aslında ikinci önceki girişi değiştirdi); alias sbb 'sudo \!\!'beklenen (ikame edilmiş olarak iş yaptığı sbbiçin !!); ve sonunda, istediğim şeyin alias sbb 'sudo \!-1', olmasını beklediğim gibi olduğu ortaya çıktı \!\!. (tcsh 6.17.06 (Astron) 2011-04-15) YMMV. İyi şanslar.
rici

Teşekkürler! Bu takma ad, yönetici olarak komutunuzun önüne sudo koymayı unuttuğunuzda mükemmeldir.
mdpc

bunun yerine, jpschorr tarafından önerilen diğer adını sbbtercih ederimprease
rubo77

40

Deneyin:

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

Aslında 'lütfen' adını vermeyi tercih ederim:

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

Bilgi: fcbash kabuğundaki yerleşik bir komuttur. Daha önce etkileşimli bir kabuğa girilen komutları listeler, düzenler ve yeniden düzenler.


13
pleasekesinlikle gitmenin yolu!
Anto

bash için de çalışır, bu yüzden 'for zsh' yorumunu kaldırın.
Michael Durrant,

1
Zsh içinde iyi çalışıyor. fc kullanılacak komuttur. Teşekkürler
Frax

pleaseTerminalin işleri halletmek için iyi davranmam gereken bir varlık olduğunu hissettiriyor . Daha iyi bir kontrol hissi veren bir şeyi tercih ederim - fuck;;)
Przemek D


0

Bu başlangıçta bu soruya gönderildi, ancak daha sonra buraya gönderilmesini önerdi.

Burada nasıl kullanabileceğinizi olduğunu fcve historyiçin takma adla !-gibi değiştirmelerin. Diyelim ki kullanmak istiyorsanız !-n( n , kullanılan son komutun n'ini rakamdır ), öyleyse fcve historydiğer adlarını aşağıdaki gibi kullanabilirsiniz :

  1. Kullanarak history:

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

    Not: Burada veya !-nile çevrelenmiş olmalıdır .'''

  2. Kullanarak fc:

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

    Not: Burada 1 st ve 2 nd -n geçmiş listesinde aralığını belirlemek için kullanılır.

Burada felling için komut çalıştırmadan önce yankı kullandım !-<n>.


Önceki cevaplar zaten history -pve kapsar fc. Burada yeni bir şey var mı?
muru

Tamam, ne olmuş?
muru

-ln -n -nYoğun kafa karıştırıcı buluyorum ; ayrıca bit 'veya hakkında ''(ve ayrıca bit -<n>).
Scott

Seçenek 2. bir yazım hatası olmalı, bence istediğini düşünüyorum$(fc -ln -1)
cmcginty

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.