web-dev-qa-db-fra.com

Construire une liste de zenity dynamique en utilisant une variable bash

J'essaie de créer une interface zenity en appelant l'un des nombreux scripts situés dans un dossier spécifique. Pour cela, je me base sur zenity --list. Je souhaite que la liste comporte deux colonnes: 1) nom du fichier de script et 2) description du texte [à partir du commentaire de la troisième ligne, dans le fichier de script lui-même].

Je peux créer une colonne unique pour une interface avec un nom de fichier uniquement, sans problème. Le problème ici se pose lorsque je souhaite utiliser une deuxième colonne pour la description, en essayant de reproduire l'exemple suivant:

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"

Plus simplement, j'aimerais comprendre pourquoi les deux ensembles de commandes suivants ne fournissent pas des résultats similaires, à partir d'un terminal:

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

et

$ 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
1
Tfb9

Les citations dans une chaîne entre guillemets importent peu pour le shell qui effectue la division du champ. Ils sont comme n'importe quel autre personnage. Ainsi, lorsque vous utilisez $TESTSTRING au lieu de "$TESTSTRING", les guillemets entre - ceux qui entourent chaise longue et moineau - ne pas empêchent la division de champ:

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

Si vous souhaitez conserver le fractionnement souhaité, utilisez des tableaux:

$ TESTSTRING=(a.sh "chaise longue" b.sh "moineau")
$ printf "%s\n" "${TESTSTRING[@]}"
a.sh
chaise longue
b.sh
moineau
5
muru

Liste dynamique avec MySql

J'utilise ce code pour un projet de mon école que vous pouvez utiliser

#!/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;
}

Tout d'abord, je définis une fonction 'lista' et l'appelle dans le code 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"
0
Wilmer Acosta

Citez chaque variable, comme suit:

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

enter image description here

0