Bash
在 FreeBSD 中列出鎖定包的 Shell 腳本
我正在嘗試製作一個能夠列出 FreeBSD 中所有鎖定(禁止升級)的軟體包。
通常,您發出以下命令:
pkg info -ak
它輸出系統中所有包的列表,包括鎖定和解鎖,這對我不起作用,因為我只想要鎖定的包。如果我 grep ‘yes’ 它正是我想要的:
pkg info -ak | grep yes
它輸出以下內容:
nginx-devel-1.5.10 yes php5-extensions-1.7 yes php55-5.5.8 yes
現在,我想要的是能夠通過更改字元串 ‘yes’ 來稍微編輯該輸出(添加省略版本的包名稱):
nginx-devel-1.5.10 locked, run: sudo pkg unlock nginx-devel php5-extensions-1.7 locked, run: sudo pkg unlock php5-extensions php55-5.5.8 locked, run: sudo pkg unlock php55
我嘗試以下失敗:
pkg info -ak | grep yes | sed s/yes/"locked - run: sudo pkg unlock $(pkg info -ak | grep yes | cut -d - f1-2)"/
雖然我嘗試過的方法不起作用,但我發布它只是為了讓您了解我想要實現的目標。
pkg info -ak | grep -w yes | while read line; do packnum=`echo $line | awk '{print $1}'`; pack=`echo $packnum | awk 'BEGIN{FS=OFS="-"}{$NF=""; NF--; print}'` ; printf "%-33s%s\n" "$packnum" "locked, run: sudo pkg unlock$pack" ;done
我
-w
為您添加了選項,grep
以避免與名稱字元串中包含“yes”的包混淆。