如何设置永久别名
How to set permanent alias
谁能帮我设置以下脚本为别名:
ps axu | awk '{print , , , }' | head -1 && ps axu | awk '{print , , , }' | sort -k3 -nr |head -20
我尝试在 .bashrc
行下添加文件
alias abc='ps axu | awk '{print , , , }' | head -1 && ps axu | awk '{print , , , }' | sort -k3 -nr |head -20'
但是运气不好,我遇到了以下错误
$abc
Usage: grep [OPTION]... PATTERN [FILE]... sort: read failed: /apps/: Is a directory Try 'grep --help' for more information.
我不知道 grep
的来源,但你的问题是引号不是那样嵌套的。
当您将单引号 awk 脚本放在别名的单引号内时,引号匹配不正确。
将每个 "inner" 单引号替换为 '\''
,它应该可以工作。
alias abc='ps axu | awk '\''{print , , , }'\'' | head -1 && ps axu | awk '\''{print , , , }'\'' | sort -k3 -nr |head -20'
提示:不要调用 ps
两次:将输出通过管道传递给一组命令。作为一个函数,你将更少引用悲伤。
abc() {
ps axu | awk '{print , , , }' | {
IFS= read -r header && echo "$header" # the first line
sort -k3 -nr | head -20 # all the rest
}
}
命令ps
是非常可配置的。这两个命令几乎是等价的,你通过awk选择,并且配置了ps格式:
ps axu | awk '{print , , , }'
ps axopid,pcpu,pmem,comm
其中用户 u
格式已替换为特殊格式 o pid,pcpu,pmem,cmd
。是相似的,不完全相同只是因为命令名称和一些格式。我们稍后再讲。
如果命令名称不是交易破坏者,ps 甚至可以使用 k
选项按某些选定的键进行排序,并且只选择 20 行我们得到:
ps axopid,pcpu,pmem,comm k-pmem | head -20
它取代了您初始命令的所有选择、排序和格式设置。我认为这应该足以满足所有实际用途。
但是如果您确实需要与原始输出相同的输出,我们需要扩展命令以显示所有参数。对于某些命令,这样的输出很长并且格式不正确。此外,您使用的 awk 处理无法通过普通 ps 复制。我们需要删除第一个 space 中的命令部分,并且为了获得更好的格式,我们需要一些 printf love。
总而言之,这得到了完全相同的输出(好吧,格式更好一点):
ps axopid,pcpu,pmem,cmd k-pmem | head -20 | awk '
{gsub(/ .*/, "", ); printf "%5s %4s %4s %-.50s\n", ,,,}'
并且,只是将其设为单行以使其更易于使用 copy/paste:
ps axopid,pcpu,pmem,cmd k-pmem | head -20 | awk '{gsub(/ .*/, "", ); printf "%5s %4s %4s %-.50s\n", ,,,}'
如此一来,别名就变成了一行。
希望别名能够正常工作。
谁能帮我设置以下脚本为别名:
ps axu | awk '{print , , , }' | head -1 && ps axu | awk '{print , , , }' | sort -k3 -nr |head -20
我尝试在 .bashrc
行下添加文件
alias abc='ps axu | awk '{print , , , }' | head -1 && ps axu | awk '{print , , , }' | sort -k3 -nr |head -20'
但是运气不好,我遇到了以下错误
$abc
Usage: grep [OPTION]... PATTERN [FILE]... sort: read failed: /apps/: Is a directory Try 'grep --help' for more information.
我不知道 grep
的来源,但你的问题是引号不是那样嵌套的。
当您将单引号 awk 脚本放在别名的单引号内时,引号匹配不正确。
将每个 "inner" 单引号替换为 '\''
,它应该可以工作。
alias abc='ps axu | awk '\''{print , , , }'\'' | head -1 && ps axu | awk '\''{print , , , }'\'' | sort -k3 -nr |head -20'
提示:不要调用 ps
两次:将输出通过管道传递给一组命令。作为一个函数,你将更少引用悲伤。
abc() {
ps axu | awk '{print , , , }' | {
IFS= read -r header && echo "$header" # the first line
sort -k3 -nr | head -20 # all the rest
}
}
命令ps
是非常可配置的。这两个命令几乎是等价的,你通过awk选择,并且配置了ps格式:
ps axu | awk '{print , , , }'
ps axopid,pcpu,pmem,comm
其中用户 u
格式已替换为特殊格式 o pid,pcpu,pmem,cmd
。是相似的,不完全相同只是因为命令名称和一些格式。我们稍后再讲。
如果命令名称不是交易破坏者,ps 甚至可以使用 k
选项按某些选定的键进行排序,并且只选择 20 行我们得到:
ps axopid,pcpu,pmem,comm k-pmem | head -20
它取代了您初始命令的所有选择、排序和格式设置。我认为这应该足以满足所有实际用途。
但是如果您确实需要与原始输出相同的输出,我们需要扩展命令以显示所有参数。对于某些命令,这样的输出很长并且格式不正确。此外,您使用的 awk 处理无法通过普通 ps 复制。我们需要删除第一个 space 中的命令部分,并且为了获得更好的格式,我们需要一些 printf love。
总而言之,这得到了完全相同的输出(好吧,格式更好一点):
ps axopid,pcpu,pmem,cmd k-pmem | head -20 | awk '
{gsub(/ .*/, "", ); printf "%5s %4s %4s %-.50s\n", ,,,}'
并且,只是将其设为单行以使其更易于使用 copy/paste:
ps axopid,pcpu,pmem,cmd k-pmem | head -20 | awk '{gsub(/ .*/, "", ); printf "%5s %4s %4s %-.50s\n", ,,,}'
如此一来,别名就变成了一行。
希望别名能够正常工作。