我想为以下命令创建一个 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 函数。