псевдонимы в bash и awk экранирование кавычек
Я пытаюсь создать псевдоним для команды, чтобы увидеть использование памяти,
ps -u user -o rss,command | grep -v peruser | awk '{sum+=} END {print sum/1024}'
но, наивные,
#.bash_aliases
alias totalmem='ps -u user -o rss,command | grep -v peruser | awk '{sum+=} END {print sum/1024}''
выдает ошибки:
-bash: alias: END: not found
-bash: alias: {print: not found
-bash: alias: sum/1024}: not found
Я пробовал с двойными кавычками,
totalmem ="ps ... |awk '{sum+=} END {print sum/1024}'"
или
totalmem ='ps ... |awk "{sum+=} END {print sum/1024}"'
,
побег,
totalmem ='ps ... |awk '{sum+=} END {print sum/1024}''
,
или избежать двойных кавычек ... но у меня ничего не получается.
totalmem ='ps ... |awk "{sum+=} END {print sum/1024}"'
,
выдает ошибку
awk: "{sum+=}
awk: ^ unterminated string
любые советы с благодарностью.
3 ответов
у вас почти получилось,$
будет расширен в двойных кавычках, так что требуется дополнительное экранирование:
alias totalmem='ps -u user -o rss,command | grep -v peruser | awk "{sum+=$1} END {print sum/1024}"'
или с рисунком внутри awk
как было предложено iiSeymour:
alias totalmem='ps -u user -o rss,command | awk "!/peruser/ {sum+=$1} END {print sum/1024}"'
вы можете избежать проблем с цитированием, используя функцию оболочки вместо псевдонима:
totalmem () {
ps -u user -o rss,command | grep -v peruser | awk '{sum+=} END {print sum/1024}'
}
Это также более гибко, как вы могли бы позволить totalmem
принимать аргументы, такие как имя пользователя для передачи в на ps
, например:
totalmem () {
ps -u "" -o rss,command | grep -v peruser | awk '{sum+=} END {print sum/1024}'
}
такой:
alias totalmem='ps -u user -o rss,command | grep -v peruser | awk '\''{sum+=} END {print sum/1024}'\'
объяснение: вы можете использовать различные кавычки для одного и того же аргумента, например "I'm double-quoted"'and I am $HOME-less'-and-i-am-not-quoted
. Следовательно, если вам нужна одна цитата внутри одинарных кавычек, вы можете добавить '\''
который (1) завершает одинарное цитирование, (2) добавляет буквальную одинарную кавычку с \'
, (3)снова начинает одиночное цитирование.
(псевдонимы такого размера-это то, что лучше делать как функции).