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
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
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"