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.