Mas*_*ran 7 bash awk alias quote
我正在尝试为命令创建别名以查看内存使用情况,
ps -u user -o rss,command | grep -v peruser | awk '{sum+=$1} END {print sum/1024}'
Run Code Online (Sandbox Code Playgroud)
但是,天真的,
#.bash_aliases
alias totalmem='ps -u user -o rss,command | grep -v peruser | awk '{sum+=$1} END {print sum/1024}''
Run Code Online (Sandbox Code Playgroud)
给出错误:
-bash: alias: END: not found
-bash: alias: {print: not found
-bash: alias: sum/1024}: not found
Run Code Online (Sandbox Code Playgroud)
我试过双引号,
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
Run Code Online (Sandbox Code Playgroud)
任何提示赞赏.
che*_*ner 15
您可以通过使用shell函数而不是别名来避免引用问题:
totalmem () {
ps -u user -o rss,command | grep -v peruser | awk '{sum+=$1} END {print sum/1024}'
}
Run Code Online (Sandbox Code Playgroud)
这也更灵活,因为您可以允许totalmem接受参数,例如用户名传递给-u选项ps,如下例所示:
totalmem () {
ps -u "$1" -o rss,command | grep -v peruser | awk '{sum+=$1} END {print sum/1024}'
}
Run Code Online (Sandbox Code Playgroud)
你几乎拥有它,$将用双引号扩展,所以需要额外的转义:
alias totalmem='ps -u user -o rss,command | grep -v peruser | awk "{sum+=\$1} END {print sum/1024}"'
Run Code Online (Sandbox Code Playgroud)
或者使用iiSeymourawk建议的内部图案:
alias totalmem='ps -u user -o rss,command | awk "!/peruser/ {sum+=\$1} END {print sum/1024}"'
Run Code Online (Sandbox Code Playgroud)
像这样:
alias totalmem='ps -u user -o rss,command | grep -v peruser | awk '\''{sum+=$1} END {print sum/1024}'\'
Run Code Online (Sandbox Code Playgroud)
说明:您可以对同一个参数使用不同类型的引号,例如"I'm double-quoted"'and I am $HOME-less'-and-i-am-not-quoted.因此,如果您需要单引号内的单引号,您可以添加'\''哪个(1)终止单引号,(2)添加文字单引号\',(3)再次开始单引号.
(这种大小的别名是最好的功能).