Script de shell para listar pacotes bloqueados no FreeBSD

1

Estou tentando fazer com que um oneliner consiga listar todos os pacotes bloqueados (proibidos de atualizar) no FreeBSD.

Normalmente, você emite este comando:

pkg info -ak

Produz uma lista de todos os pacotes no sistema, incluindo bloqueado e desbloqueado, o que não está funcionando para mim, pois eu só quero os bloqueados. Se eu grep 'sim' faz exatamente o que eu quero:

pkg info -ak | grep yes

Produz o seguinte:

nginx-devel-1.5.10             yes
php5-extensions-1.7            yes
php55-5.5.8                    yes

Agora, o que eu quero é poder editar essa saída um pouco alterando a string 'yes' para seguir ( adicionando o nome do pacote com a versão omitida ):

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

Eu tentei seguir sem sucesso:

pkg info -ak | grep yes | sed s/yes/"locked - run: sudo pkg unlock $(pkg info -ak | grep yes | cut -d - f1-2)"/

Embora o que tentei não esteja funcionando, postei-o apenas para você ter a ideia do que estou tentando alcançar.

    
por dzhi 05.02.2014 / 18:07

1 resposta

1
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

Eu adicionei a opção -w ao seu grep para evitar confusão com os pacotes que contêm "yes" em sua string de nome.

    
por 05.02.2014 / 18:31