Jak mogę uzyskać alias sudo !!?


50

Próbuję ustawić alias dla sudo !!w Bash. Próbowałem alias sbb='sudo !!”, ale interpretuje to jako dosłowny !!i drukowany

sudo: !!: command not found

Jeśli użyję podwójnych cudzysłowów, zastępuje podwójny huk w samym ciągu, więc to nie działa.

Czy jest jakiś sposób, aby to zadziałało? Lub alternatywny alias? `



Odpowiedzi:


61

!!jest rozwijany przez bash podczas pisania. Nie jest rozszerzany przez podstawienie aliasu.

Możesz użyć historywbudowanego do rozszerzenia:

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

Jeśli polecenie jest czymś więcej niż prostym poleceniem (np. Zawiera przekierowania lub potoki), musisz wywołać powłokę pod sudo:

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

Masz jeden na TCSH?
mdpc,

1
@mdpc: Nie używam tcsh, ale spojrzał na man tcshi odkrył, że ma zrobić interpretację historii podczas ekspansji alias „jakby były oryginalne polecenia poprzedniego wiersza wejściowego.” Ciekawy. Jednak alias sbb 'sudo \!-2nie działało zgodnie z oczekiwaniami (faktycznie zastąpiło drugi poprzedni wpis); alias sbb 'sudo \!\!'nie działa prawidłowo (podstawione sbbna !!); i ostatecznie okazało się, że chciałem tego, alias sbb 'sudo \!-1'czego bym się spodziewał \!\!. (tcsh 6.17.06 (Astron) 15.04.2011) YMMV. Powodzenia.
rici

Dzięki! Ten alias jest świetny, gdy jako administrator zapomnisz umieścić sudo przed swoim poleceniem.
mdpc,

zamiast sbbwolałbym preasetak alias jak sugerował @jpschorr
rubo77

40

Próbować:

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

W rzeczywistości wolę nazywać to „proszę”:

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

Informacje: fcto wbudowane polecenie w powłoce bash. która wyświetla, edytuje i ponownie wykonuje polecenia wprowadzone wcześniej w interaktywnej powłoce.


13
pleaseto zdecydowanie najlepsza droga!
Anto

działa również dla bash, więc usunąłem komentarz „dla zsh”.
Michael Durrant,

1
Działa dobrze w Zsh. fc to polecenie, którego należy użyć. Dzięki
Frax

pleasesprawia wrażenie, jakby terminal był bytem, ​​do którego muszę być miły , aby załatwić sprawę. Wolę coś, co daje lepsze poczucie kontroli - jak fuck;)
Przemek D


0

Zostało to pierwotnie opublikowane na to pytanie, ale później sugerowano opublikowanie tutaj.

Oto w jaki sposób można wykorzystać fci historyz aliasu dla !-podobnych zastępstw. Załóżmy, że jeśli chcesz użyć !-n(gdzie n jest cyfrą dla n- tego ostatniego użytego polecenia), możesz użyć fciz historyaliasem w następujący sposób:

  1. Używanie history:

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

    Uwaga: Tutaj !-nnależy dołączyć 'lub ''.

  2. Używanie fc:

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

    Uwaga: tu 1 st i 2 nd -n służą do określenia zakresu liście historii.

W tym przypadku użyłem echa przed wykonaniem polecenia do wycinki typu like !-<n>.


Poprzednie odpowiedzi już obejmują history -pi fc. Coś tu nowego?
muru

Ok, a co z tego?
muru

Uważam -ln -n -nto za bardzo zagmatwane; także trochę o 'lub ''(a także trochę o -<n>).
Scott

Opcja 2. musi być literówką, myślę, że chcesz$(fc -ln -1)
cmcginty

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.