Bash

在 FreeBSD 中列出鎖定包的 Shell 腳本

  • September 13, 2018

我正在嘗試製作一個能夠列出 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”的包混淆。

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