如何设置永久别名

时间:2015-08-20 01:45:40

标签: linux bash awk alias system-administration

任何人都可以帮我设置以下脚本作为别名:

ps axu | awk '{print $2, $3, $4, $11}' | head -1 && ps axu | awk '{print $2, $3, $4, $11}' | sort -k3 -nr |head -20

我尝试添加以下行.bashrc文件

alias abc='ps axu | awk '{print $2, $3, $4, $11}' | head -1 && ps axu | awk '{print $2, $3, $4, $11}' | sort -k3 -nr |head -20'

但没有运气,我收到了以下错误

$abc
Usage: grep [OPTION]... PATTERN [FILE]... sort: read failed: /apps/: Is a directory Try 'grep --help' for more information.

3 个答案:

答案 0 :(得分:3)

这里有一个提示:不要两次调用ps:将输出传递给一组命令。作为一种功能,你引用的悲伤要少得多。

abc() {
    ps axu | awk '{print $2, $3, $4, $11}' | {
        IFS= read -r header && echo "$header"  # the first line
        sort -k3 -nr | head -20                # all the rest
    }
}

答案 1 :(得分:1)

命令ps axu | awk '{print $2, $3, $4, $11}' ps axopid,pcpu,pmem,comm 非常易于配置。这两个命令几乎相同,由awk选择,以及配置的ps格式:

u

用户o pid,pcpu,pmem,cmd格式替换为特殊格式k。是类似的,不仅仅是因为命令名称和一些格式。我们稍后会谈到这一点。

如果命令名称不是交易破坏者,ps甚至可以使用ps axopid,pcpu,pmem,comm k-pmem | head -20 选项按某些选定的键进行排序,并且只选择20行:

ps axopid,pcpu,pmem,cmd k-pmem | head -20 | awk '
    {gsub(/ .*/, "", $4); printf "%5s %4s %4s %-.50s\n", $1,$2,$3,$4}'

替换所有初始命令的选择,排序和格式。对于我认为的所有实际用途来说,这应该足够了。

但是如果您确实需要与原始输出相同的输出,我们需要展开命令以显示所有args。某些命令的输出非常长,格式不好。此外,您使用的awk处理无法通过普通ps复制。我们需要在第一个空格中剪切命令部分,为了获得更好的格式,我们需要一些printf爱。

所有人都说,这得到完全相同的输出(好吧,格式化得更好):

ps axopid,pcpu,pmem,cmd k-pmem | head -20 | awk '{gsub(/ .*/, "", $4); printf "%5s %4s %4s %-.50s\n", $1,$2,$3,$4}'

而且,只需将其设为一行就可以更轻松地复制/粘贴:

// Obtain User Data via Facebook Login
func returnUserData()
{
    let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields":"name, email"])
    graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in

        if ((error) != nil)
        {
            // Process error
        }
        else
        {
           let userName: String = result.valueForKey("name") as! String
           let Email: String = result.valueForKey("email") as! String
           println(userName)
           println(Email)

        }
    })
}

因此,别名只变成一行。

我希望你能够让别名正常工作。

答案 2 :(得分:0)

我不知道grep来自哪里,但你的问题是引号不会像那样嵌套。

当您将单引号awk脚本卡在别名的单引号内时引号匹配错误。

将每个“内部”单引号替换为'\'',它应该有效。

alias abc='ps axu | awk '\''{print $2, $3, $4, $11}'\'' | head -1 && ps axu | awk '\''{print $2, $3, $4, $11}'\'' | sort -k3 -nr |head -20'