Як створити псевдонім за допомогою команди містить "і"


10

Кілька дописів тому хтось запитав, як показати пам'ять у відсотках. Хтось відповів:

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

Мені було цікаво, чи можу я перетворити цю команду на псевдонім у ~ / .bashrc. Але синтаксис псевдоніма такий:

alias aliasname='command'

Як я можу це зробити? Ця команда містить і 'і, і ". Я пробував різні способи, але це не вийшло. Це навіть можливо? Я щось пропускаю?


5
Щоб уникнути цитування пекла, у таких випадках може бути простіше просто визначити функцію.
nohillside

1
@nohillside функції, як правило, більш корисні / потужні в будь-якому випадку
Д. Бен Нобл

1
aliasname() { free | awk '/^Mem/ { printf("free: %.2f %\n", $4/$2 * 100.0) }'; }- все ще лише один рядок, жодних змін у котируванні / уникнення / тощо взагалі не потрібно. Існує причина, що fodeode #bash канал !aliasfactoid є (ну, був , але для більшості фактів життя бота factoid якийсь варіант): Якщо вам потрібно запитати, скористайтеся функцією замість цього .
Чарльз Даффі

Відповіді:


8

Тобі потрібно:

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

Зауважте, що вам потрібно втекти і з "і $.


17

Сказати, що синтаксис псевдоніма є alias aliasname='command'дещо оманливим, оскільки, мабуть, випливає, що одиничні лапки є частиною синтаксису. Вони не. Частина після знака рівності схожа на призначення змінних, оскільки це може бути будь-яке слово оболонки , що складається або з простих символів (без лапок), або з цитованого рядка, або з комбінації.

Усі вони дійсні і три останні еквіваленти:

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

Отже, все, що вам потрібно зробити, - це належним чином уникнути цитат, щоб мати їх усередині псевдоніму.

Див., Наприклад, цю відповідь та інші відповіді, наприклад, на це питання для обговорення:

Або скористайтеся функцією замість псевдоніму, щоб повністю позбутися від цитування проблем:

freemem() {
    free | awk '/^Mem/ { printf("free: %.2f %\n", $4/$2 * 100.0) }'
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.