Come creare un alias con un comando contiene 'e "


10

Qualche post fa qualcuno ha chiesto come mostrare la memoria in percentuale. Qualcuno ha risposto con:

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

Mi chiedevo se posso trasformare questo comando in un alias in ~ / .bashrc. Ma la sintassi dell'alias è:

alias aliasname='command'

Come posso fare questo? Questo comando contiene sia 'e ". Ho provato diversi modi, ma non ha funzionato. È possibile? Mi sto perdendo qualcosa?


5
Per evitare di citare l'inferno, potrebbe essere più semplice definire una funzione in questi casi.
Nohillside,

1
Le funzioni di @nohillside sono generalmente più utili / potenti comunque
D. Ben Knoble

1
aliasname() { free | awk '/^Mem/ { printf("free: %.2f %\n", $4/$2 * 100.0) }'; }- ancora solo una riga, non è necessario apportare modifiche a quotazioni / escape / ecc. C'è una ragione per cui il factoid del canale #bash di freenode !aliasè (beh, lo era , ma per la maggior parte della vita del bot factoid è una variante di): Se devi chiedere, usa invece una funzione .
Charles Duffy,

Risposte:


8

Hai bisogno:

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

Si noti che è necessario fuggire sia "e $.


17

Dire che la sintassi di un alias è alias aliasname='command'un po 'fuorviante, in quanto sembra implicare che le virgolette singole facciano parte della sintassi. Non sono. La parte dopo il segno di uguale è simile alle assegnazioni di variabili, in quanto può essere qualsiasi parola shell , composta da caratteri semplici (senza virgolette), o una stringa tra virgolette o una combinazione.

Questi sono tutti validi e gli ultimi tre equivalenti:

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

Quindi, tutto quello che devi fare è sfuggire alle virgolette correttamente per averle all'interno del valore alias.

Vedi, ad esempio, questa risposta e altre risposte, ad esempio, a queste domande di discussione su questo:

In alternativa, utilizzare la funzione anziché un alias per eliminare completamente i problemi di quotazione:

freemem() {
    free | awk '/^Mem/ { printf("free: %.2f %\n", $4/$2 * 100.0) }'
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.