Jak utworzyć alias za pomocą polecenia zawiera „i”

10

Kilka postów temu ktoś zapytał, jak procentowo wyświetlać pamięć. Ktoś odpowiedział:

free | awk '/^Mem/ { printf("free: %.2f %\n", $4/$2 * 100.0) }'

Zastanawiałem się, czy mogę zmienić to polecenie w alias w ~ / .bashrc. Ale składnia aliasu jest następująca:

alias aliasname='command'

W jaki sposób mogę to zrobić? To polecenie zawiera zarówno 'i ". Próbowałem na różne sposoby, ale to nie działało. Czy to w ogóle możliwe? Czy coś brakuje?

BlackCrystal
źródło
5
Aby uniknąć cytowania piekła, w takich przypadkach łatwiej jest po prostu zdefiniować funkcję.
nohillside
1
Funkcje @nohillside i tak są generalnie bardziej użyteczne / wydajne
D. Ben Knoble,
1
aliasname() { free | awk '/^Mem/ { printf("free: %.2f %\n", $4/$2 * 100.0) }'; }- wciąż tylko jedna linia, bez żadnych zmian w cytowaniu / ucieczce / etc. Jest powód, dla którego !aliasfaktoid kanału #bash dla freenode jest (no cóż, był , ale przez większość życia bota factoidu jakiś wariant): Jeśli musisz zapytać, użyj funkcji zamiast tego .
Charles Duffy

Odpowiedzi:

8

Potrzebujesz:

alias aliasname="free | awk '/^Mem/ { printf(\"free: %.2f %\n\", \$4/\$2 * 100.0) }'"

Zauważ, że musisz uciec zarówno "i $.

Arkadiusz Drabczyk
źródło
17

Mówienie, że składnia aliasu jest alias aliasname='command'nieco myląca, ponieważ wydaje się sugerować, że pojedyncze cudzysłowy są częścią składni. Oni nie są. Część po znaku równości jest podobna do przypisań zmiennych, ponieważ może być dowolnym słowem powłoki , złożonym ze zwykłych znaków (bez cudzysłowów), ciągu cytowanego lub kombinacji.

Wszystkie są ważne, a ostatnie trzy równoważne:

alias ks=ls
alias ls='ls -l'
alias ls="ls -l"
alias ls=ls\ -l

Wszystko, co musisz zrobić, to odpowiednio uciec cudzysłowom, aby znalazły się w wartości aliasu.

Zobacz np. Tę odpowiedź i inne odpowiedzi na np. Te pytania do dyskusji na ten temat:

Lub użyj funkcji zamiast aliasu, aby całkowicie pozbyć się problemów z cytowaniem:

freemem() {
    free | awk '/^Mem/ { printf("free: %.2f %\n", $4/$2 * 100.0) }'
}
ilkkachu
źródło