zenity não exibe todas as listas com variáveis

2

Estou fazendo uma pesquisa e instale o script PPA para o Ubuntu. Este script com zenity funciona 80%, o problema é quando este script pesquisa; exibe apenas a primeira linha. Eu preciso de todas as linhas

#!/bin/sh

# simple search and install PPA
# by David Vásquez


if [ $# -gt 0 ] ; then
    echo "$*"
else
    echo "No input"
exit
fi

code=$*

cat /dev/null > /tmp/ppa
cat /dev/null > /tmp/ppa-url-tmp


mojito=$(curl https://launchpad.net/ubuntu/+ppas?name_filter=$code | grep -e '+archive/' | grep "$code" | awk -F'<td><a href="/~' '{print $2}' | awk -F'">' '{print $1}' | uniq | tr -d '~')

echo $mojito | tr ' ' '\n' | tee -a /tmp/ppa-url-tmp




file="/tmp/ppa-url-tmp"
while IFS= read -r line; do
        # display $line or do somthing with $line
title=$(curl https://launchpad.net/~$line | grep -e '<title>'  | awk -F '<title>' '{print $2}' | awk -F '</title>' '{print $1}' | sed 's/^/"/' | sed 's/$/"/')


description=$(curl https://launchpad.net/~$line | grep -e 'content='  | awk -F 'content="' '{print $2}' | awk -F '.' '{print $1}' | tr -d '/>' | tr -d '"' | sed -e :a -e N -e 's/\n/ /' -e ta | sed 's/^/"/' | sed 's/$/"/') 


support=$(curl https://launchpad.net/~$line | grep -e '<option value='  | grep [0-9] | awk -F '(' '{print $2}' | awk -F ')' '{print $1}' | sed -e :a -e N -e 's/\n/ /' -e ta | awk '{print $1, $2, $3}' | sed 's/^/"/' | sed 's/$/"/' )


echo $title $description $support $line | uniq -u | tee -a /tmp/ppa

zenity --list --radiolist --title="Package installation." --text="Select package to be installed" --width=800 --height=500 --column=In --column=Name --column=Description --column=Compatible --column=PPA "in" "$title" "$description" "$support" "$line"

if [[ "$?" != 0 ]]; then
exit
else

CHECK_INST=$(echo $CHECK | awk -F'|' '{print $5}')

sudo apt-add-repository $CHECK_INST
sudo apt-get -y update
sudo apt-get install $code
fi

done <"$file"

Minha outra tentativa aqui (mesmos resultados)

Do terminal, um exemplo

myscript pipelight

    
por davidva 31.05.2014 / 11:03

1 resposta

2

A partir de sua descrição e código, parece que você está procurando por algo assim:

Paraobterumacaixadediálogoqueéconstruídadessaforma,oscriptoriginalprecisaserampliadodealgumasmaneirasprincipais.Paracomeçar,vocêprecisamoverachamadaparaconstruirodiálogozenitydemodoquefiqueforadoloopwhilequeestácoletandotodososdadossobreosváriosPPAs.

AoutracoisaquefaltavaeraumaestruturadedadosparaarmazenartodososbitssobreosPPAsquevocêestavacoletando.Paraisso,umarrayBashéo"contêiner" perfeito para esses dados.

lines=("${lines[@]}" "FALSE" "$title" "$description" "$support" "$line")

Isso continuará adicionando os resultados coletados por meio do loop while a uma matriz chamada lines . Este array é então dado a zenity , ele contém os dados da coluna.

Script completo

Aqui está a coisa toda montada, que produziu a captura de tela acima da caixa de diálogo.

#!/bin/bash

file="ppa-url-tmp"

lines=()
while IFS= read -r line; do
        # display $line or do somthing with $line
title=$(curl https://launchpad.net/~$line | grep -e '<title>'  | awk -F '<title>' '{print $2}' | \
    awk -F '</title>' '{print $1}' | sed 's/^/"/' | sed 's/$/"/')


description=$(curl https://launchpad.net/~$line | grep -e 'content='  | awk -F 'content="' '{print $2}' | \
    awk -F '.' '{print $1}' | tr -d '/>' | tr -d '"' | sed -e :a -e N -e 's/\n/ /' -e ta | sed 's/^/"/' | sed 's/$/"/') 


support=$(curl https://launchpad.net/~$line | grep -e '<option value='  | grep [0-9] | awk -F '(' '{print $2}' | \
    awk -F ')' '{print $1}' | sed -e :a -e N -e 's/\n/ /' -e ta | awk '{print $1, $2, $3}' | sed 's/^/"/' | sed 's/$/"/' )

echo $title $description $support $line | uniq -u | tee -a /tmp/ppa
lines=("${lines[@]}" "FALSE" "$title" "$description" "$support" "$line")

done <"$file"

zenity --list --radiolist --title="Package installation." --text="Select package to be installed" \
    --width=800 --height=500 --column=In --column=Name --column=Description --column=Compatible --column=PPA "${lines[@]}"

if [[ "$?" != 0 ]]; then
  exit
else

  CHECK_INST=$(echo $CHECK | awk -F'|' '{print $5}')

  sudo apt-add-repository $CHECK_INST
  sudo apt-get -y update
  sudo apt-get install $code
fi

Dica de depuração adicional

Quando não está claro o que algo está fazendo em um script Bash, alcance os comandos set -x e set +x . Estes irão habilitar e desabilitar a verbosidade do Bash, o que pode realmente ajudar a esclarecer o que está acontecendo. Aqui está o meu comando zenity com apenas verbosidade aparecendo:

set -x
zenity --list --radiolist --title="Package installation." --text="Select package to be installed" \
    --width=800 --height=500 --column=In --column=Name --column=Description --column=Compatible --column=PPA "${lines[@]}"
set +x

E aqui está o que parece quando eu corro ./myscript ... :

+ zenity --list --radiolist '--title=Package installation.' '--text=Select package to be installed' --width=800 --height=500 --column=In --column=Name --column=Description --column=Compatible --column=PPA FALSE '"pipelight-daily : Michael Müller"' '"This PPA provides daily builds of the Pipelight project pipelight-daily "' '"14.04 13.10 13.04"' mqchael/+archive/pipelight-daily FALSE '"Pipelight : Michael Müller"' '"Pipelight allows one to run Silverlight inside a Linux browser using Wine Pipelight "' '"14.04 13.10 13.04"' mqchael/+archive/pipelight FALSE '"pipelight-experimental : “Pipelight Dev Team” team"' '"Experimental packages for Pipelight  pipelight-experimental "' '"14.04 13.10 13.04"' pipelight/+archive/experimental FALSE '"pipelight-daily : “Pipelight Dev Team” team"' '"pipelight-daily "' '"14.10 14.04 13.10"' pipelight/+archive/daily FALSE '"pipelight-stable : “Pipelight Dev Team” team"' '"pipelight-stable "' '"14.10 14.04 13.10"' pipelight/+archive/stable FALSE '"libva : “Pipelight Dev Team” team"' '"libva "' '"13.10 12.10 12.04"' pipelight/+archive/libva
+ set +x

O acima revela como todos os componentes da coluna são expandidos, devidamente citados, pelo uso de "${lines[@]}" .

    
por 31.05.2014 / 23:18

Tags