带有循环、sudo、管道、标志、单引号和双引号的 Bash 别名

带有循环、sudo、管道、标志、单引号和双引号的 Bash 别名

我想为以下命令创建一个 bash 别名,该命令可以在命令行中输入,但我所有创建别名的尝试都失败了。我唯一的诊断是所有这些嵌套的引号和循环都很可怕,我不知道如何处理它们。

sudo ss -x src "*/tmp/.X11-unix/*" | grep -Eo "[0-9]+\s*$" | while read port
do sudo ss -p -x | grep -w $port | grep -v X11-unix 
done | grep -Eo '".+"' | sort | uniq -c | sort -rn

是否可以为该命令添加别名?

答案1

对于比向某些命令添加选项更复杂的事情,请使用 shell 函数而不是别名。

这是一个函数 ,mything您可以在通常定义别名的相同位置定义该函数,该函数运行您显示的命令:

mything () {
    sudo ss -x src "*/tmp/.X11-unix/*" |
    grep -Eo "[0-9]+\s*$" |
    while read -r port; do
        sudo ss -p -x | grep -w "$port"
    done |
    grep -v X11-unix | grep -Eo '".+"' |
    sort | uniq -c | sort -rn
}

我没有仔细查看您正在运行的实际命令(除了修复未引用的使用$port并将其移出grep循环),但似乎至少某些操作可以替换,awk并且您应该能够删除该循环或至少移出sudo ss它。最重要的是,如果您有一些运行起来非常复杂的东西,请为其创建一个 shell 函数。

相关内容