[英]bash_aliases and awk escaping of quotes
I'm trying to create an alias for a command to see the memory use, 我正在尝试为命令创建别名以查看内存使用情况,
ps -u user -o rss,command | grep -v peruser | awk '{sum+=$1} END {print sum/1024}'
but, the naive, 但是,天真
#.bash_aliases
alias totalmem='ps -u user -o rss,command | grep -v peruser | awk '{sum+=$1} END {print sum/1024}''
gives errors: 给出错误:
-bash: alias: END: not found
-bash: alias: {print: not found
-bash: alias: sum/1024}: not found
I've tried with double quotes, 我试过用双引号
totalmem ="ps ... |awk '{sum+=$1} END {print sum/1024}'"
, or totalmem ="ps ... |awk '{sum+=$1} END {print sum/1024}'"
,或
totalmem ='ps ... |awk "{sum+=$1} END {print sum/1024}"'
, escaping, totalmem ='ps ... |awk "{sum+=$1} END {print sum/1024}"'
,转义,
totalmem ='ps ... |awk \\'{sum+=$1} END {print sum/1024}\\''
, or escaping double quotes ... but I can't seem to make it work. 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}\\"'
,
gives the error 给出错误
awk: "{sum+=}
awk: ^ unterminated string
Any tips appreciated. 任何提示表示赞赏。
You can avoid quoting issues by using a shell function instead of an alias: 您可以通过使用Shell函数而不是别名来避免引用问题:
totalmem () {
ps -u user -o rss,command | grep -v peruser | awk '{sum+=$1} END {print sum/1024}'
}
This is also more flexible, as you could allow totalmem
to take arguments, such as a user name to pass to the -u
option of ps
, as in this example: 这也更加灵活,因为您可以允许totalmem
接受参数,例如将用户名传递给ps
的-u
选项,如以下示例所示:
totalmem () {
ps -u "$1" -o rss,command | grep -v peruser | awk '{sum+=$1} END {print sum/1024}'
}
You almost have it, the $
will be expanded in double-quotes, so that needs extra escaping: 您几乎已经拥有了, $
将被双引号扩展,因此需要额外的转义:
alias totalmem='ps -u user -o rss,command | grep -v peruser | awk "{sum+=\$1} END {print sum/1024}"'
Or with the pattern inside awk
as suggested by iiSeymour : 或者使用iiSeymour建议的awk
内的模式:
alias totalmem='ps -u user -o rss,command | awk "!/peruser/ {sum+=\$1} END {print sum/1024}"'
Like this: 像这样:
alias totalmem='ps -u user -o rss,command | grep -v peruser | awk '\''{sum+=$1} END {print sum/1024}'\'
Explanation: you may use different kind of quotes for the same argument, like "I'm double-quoted"'and I am $HOME-less'-and-i-am-not-quoted
. 说明:对于同一个参数,您可以使用不同类型的引号,例如"I'm double-quoted"'and I am $HOME-less'-and-i-am-not-quoted
。 Hence if you need a single quote inside single quotes, you can add '\\''
which (1) terminates single quoting, (2) adds literal single quote with \\'
, (3) starts single quoting again. 因此,如果您需要在单引号内包含一个单引号,则可以添加'\\''
其中(1)终止单引号,(2)添加文字单引号与\\'
,(3)再次开始单引号。
(Aliases of this size are something that's better done as functions). (这种大小的别名最好作为函数来完成)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.