Bash

帶有循環、sudo、管道、標誌、單引號和雙引號的 Bash 別名

  • May 23, 2022

我想為以下命令創建一個 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

可以給這個命令起別名嗎?

對於比向某些命令添加選項更複雜的事情,請使用 shell 函式而不是別名。

這是一個函式,mything您將在通常定義別名的相同位置定義它,它執行您顯示的命令 s:

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 函式。

引用自:https://unix.stackexchange.com/questions/703509