Criando uma lista zenity dinâmica usando a variável bash

0

Eu estou tentando construir uma interface zenity chamando um dos muitos scripts localizados em uma pasta específica. Para isso, estou confiando em zenity --list . Eu quero que a lista tenha duas colunas: 1) nome do arquivo script e 2) texto descritivo [do comentário da terceira linha, dentro do próprio arquivo de script].

Eu posso fazer uma coluna única para uma interface somente de nome de arquivo, sem nenhum problema. O problema surge quando desejo usar uma segunda coluna para descrição, tentando imitar o seguinte exemplo:

zenity --list \
  --title="Choisissez les bogues à afficher" \
  --column="N° de bogue" --column="Gravité" --column="Description" \
    992383 Normal "GtkTreeView plante lors de sélections multiples" \
    293823 Grave "Le dictionnaire GNOME ne prend pas de proxy en charge"     \
    393823 Critique "L'édition de menu ne fonctionne pas avec GNOME 2.0"

Mais simplesmente, gostaria de entender por que os dois seguintes conjuntos de comandos não fornecem resultados semelhantes, a partir de um terminal:

$ zenity --list   --title="Choose script" --column="Script" --column="Description" a.sh "chaise longue" b.sh "moineau"

e

$ TESTSTRING='a.sh "chaise longue" b.sh "moineau"'
$ echo $TESTSTRING
a.sh "chaise longue" b.sh "moineau"
$ zenity --list   --title="Choose script" --column="Script" --column="Description" $TESTSTRING
    
por Tfb9 27.10.2015 / 22:52

3 respostas

4

As citações dentro de uma string citada não importam para o shell que está dividindo o campo. Eles são como qualquer outro personagem. Portanto, quando você usa $TESTSTRING em vez de "$TESTSTRING" , as aspas em torno de chaise longue e moineau - não impedem a divisão de campo:

$ TESTSTRING='a.sh "chaise longue" b.sh "moineau"'
$ printf "%s\n" $TESTSTRING 
a.sh
"chaise
longue"
b.sh
"moineau"

Se você deseja manter o desdobramento desejado, use matrizes:

$ TESTSTRING=(a.sh "chaise longue" b.sh "moineau")
$ printf "%s\n" "${TESTSTRING[@]}"
a.sh
chaise longue
b.sh
moineau
    
por muru 27.10.2015 / 23:08
0

Cite cada variável, assim:

zenity --list   --title="Choose script" --column="Script" --column="Description" "a.sh" "chaise longue" "b.sh" "moineau"

    
por Sergiy Kolodyazhnyy 27.10.2015 / 23:14
0

Lista Dinâmica com MySql

Eu uso este código para um projeto na minha escola que você pode usar

#!/bin/bash
arg="-u user -pPass -D Database -s -e"

function lista(){
gerentes=$(mysql $arg "SELECT * FROM empleado;")
OIFS=$IFS;
IFS=$'\n';       
array=($gerentes)

for ((i=0; i<${#array[@]}; ++i));
do
 IFS=$'\t'
 cont=(${array[$i]})
 for ((j=0; j<${#cont[@]}; ++j));
 do      
     echo -n -e "${cont[$j]}" | tr -d '[[:space:]]'
     echo -n -e "\t"
 done
 IFS=$OIFS;
done
IFS=$OIFS;
}

Primeiro, eu defino uma função 'lista' e chamo-a no código zenity

OP=$(zenity --list \

 --title="Seleccione Gerente" \
 --column="id" --column="Fecha" --column="Nombres" --column="cedula" --column="user" --column="cargo" --column="direccion" \
 $(lista))

 echo "Selecciono: $OP"
    
por Wilmer Acosta 06.02.2017 / 02:02