我正在尝试为命令创建别名以查看内存使用情况,
ps -u user -o rss,command | grep -v peruser | awk '{sum+=$1} END {print sum/1024}'
但是,天真,
#.bash_aliases
alias totalmem='ps -u user -o rss,command | grep -v peruser | awk '{sum+=$1} END {print sum/1024}''
给出错误:
-bash: alias: END: not found
-bash: alias: {print: not found
-bash: alias: sum/1024}: not found
我尝试过双引号,
totalmem ="ps ... |awk '{sum+=$1} END {print sum/1024}'"
或
totalmem ='ps ... |awk "{sum+=$1} END {print sum/1024}"'
,
逃避,
totalmem ='ps ... |awk \'{sum+=$1} END {print sum/1024}\''
,
或者逃避双引号......但我似乎无法使其发挥作用。
totalmem ='ps ... |awk \"{sum+=$1} END {print sum/1024}\"'
,
给出错误
awk: "{sum+=}
awk: ^ unterminated string
任何提示赞赏。
答案 0 :(得分:14)
您可以通过使用shell函数而不是别名来避免引用问题:
totalmem () {
ps -u user -o rss,command | grep -v peruser | awk '{sum+=$1} END {print sum/1024}'
}
这也更灵活,因为您可以允许totalmem
接受参数,例如用户名传递给-u
的{{1}}选项,如下例所示:< / p>
ps
答案 1 :(得分:7)
你几乎拥有它,$
将以双引号扩展,因此需要额外的转义:
alias totalmem='ps -u user -o rss,command | grep -v peruser | awk "{sum+=\$1} END {print sum/1024}"'
或者 iiSeymour 建议的awk
内的模式:
alias totalmem='ps -u user -o rss,command | awk "!/peruser/ {sum+=\$1} END {print sum/1024}"'
答案 2 :(得分:6)
像这样:
alias totalmem='ps -u user -o rss,command | grep -v peruser | awk '\''{sum+=$1} END {print sum/1024}'\'
说明:您可以对同一参数使用不同类型的引号,例如"I'm double-quoted"'and I am $HOME-less'-and-i-am-not-quoted
。因此,如果您需要在单引号内使用单引号,则可以添加'\''
,其中(1)终止单引号,(2)使用\'
添加文字单引号,(3)再次开始单引号。< / p>
(这个大小的别名是最好的功能)。