Wie man einen Alias ​​mit einem Befehl erstellt, enthält 'und "


10

Vor ein paar Posts hat jemand gefragt, wie der Speicher in Prozent angezeigt werden soll. Jemand antwortete mit:

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

Ich habe mich gefragt, ob ich diesen Befehl in ~ / .bashrc in einen Alias ​​verwandeln kann. Die Syntax des Alias ​​lautet jedoch:

alias aliasname='command'

Wie kann ich das machen? Dieser Befehl enthält sowohl 'und ". Ich habe verschiedene Methoden ausprobiert, aber es hat nicht funktioniert. Ist das überhaupt möglich? Vermisse ich etwas


5
Um zu vermeiden, dass die Hölle zitiert wird, ist es in solchen Fällen möglicherweise einfacher, nur eine Funktion zu definieren.
Nohillside

1
@nohillside Funktionen sind im Allgemeinen sowieso nützlicher / leistungsfähiger
D. Ben Knoble

1
aliasname() { free | awk '/^Mem/ { printf("free: %.2f %\n", $4/$2 * 100.0) }'; }- Immer noch nur eine Zeile, es sind überhaupt keine Änderungen an Zitieren / Escape / etc erforderlich. Es gibt einen Grund der freenode #bash Kanal !aliasfactoid (na ja, ist wurde , aber für die meisten der factoid bot das Leben einiger Variante): Wenn Sie fragen haben, stattdessen eine Funktion zu verwenden .
Charles Duffy

Antworten:


8

Du brauchst:

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

Beachten Sie, dass Sie sowohl "als auch entkommen müssen $.


17

Zu sagen, dass die Syntax eines Alias alias aliasname='command'etwas irreführend ist, scheint zu implizieren, dass die einfachen Anführungszeichen Teil der Syntax sind. Sie sind nicht. Der Teil nach dem Gleichheitszeichen ähnelt Variablenzuweisungen, da es sich um ein beliebiges Shell- Wort handeln kann , das entweder aus einfachen Zeichen (ohne Anführungszeichen), einer Zeichenfolge in Anführungszeichen oder einer Kombination besteht.

Diese sind alle gültig und die letzten drei entsprechen:

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

Alles, was Sie tun müssen, ist, die Anführungszeichen ordnungsgemäß zu maskieren, damit sie innerhalb des Aliaswerts liegen.

Siehe zB diese Antwort und andere Antworten auf zB diese Frage zur Diskussion darüber:

Oder verwenden Sie die Funktion anstelle eines Alias, um das Zitieren von Problemen vollständig zu beseitigen:

freemem() {
    free | awk '/^Mem/ { printf("free: %.2f %\n", $4/$2 * 100.0) }'
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.