2017-07-29 4 views
0

Variables Bash dans Yad.Bash - utilisation de variables dans la zone de liste déroulante yad form

EDIT - le yad '!' Le séparateur de champs ne sépare pas les champs. Après avoir recherché d'autres questions sur la page de yad man et d'autres ressources yad, cela m'a bloqué. J'essaye d'employer des variables dans une zone de liste déroulante de forme de yad.

Les variables sont lues à partir d'une liste (cam_list) - dans ce cas, deux modèles de caméra sont répertoriés, suivis chacun de neuf paramètres - (non définis dans ce cas et pas important à la question)

450D 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 
N3300 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 

Les variables $ cam1 et $ cam2 sont déclarées comme suit: les première et onzième entrées du fichier texte.

cam1=$(awk 'BEGIN { FS = " " } ; { print $1 }' $cam_list) 
cam2=$(awk 'BEGIN { FS = " " } ; { print $11 }' $cam_list) 

Vérifiez les variables

echo $cam1 $cam2 
450D N3300 

Put cam1 de $ et CAM2 $ dans les champs de formulaire yad

yad --form --center --text="test" \ 
       --field="Camera":CB \ 
        "$cam1!$cam2" 

yad output

Ou cette façon

"$cam1"!"$cam2" 

Même résultat

En outre enfermant les variables entre guillemets montre $ cam1 seulement ...

""$cam1"!"$cam2"" 

yad output

Le comportement est le même avec des cases à cocher. Par exemple;

yad --form --center --title="$TITLE" \ 
     --text="Please select a camera" \ 
     --field="$cam1":CHK \ 
      'TRUE!FALSE' \ 
     --field="$cam2":CHK \ 
      'TRUE!FALSE' 

Pas assez réputation d'afficher une troisième image, mais les variables étendues sont regroupées dans une seule case à cocher, tandis que la deuxième case à cocher est associée à une variable - bizarre.

Ce fut un mal de tête, mais il fonctionne - les variables dilatent correctement

--field="ImageMagick threads":NUM \ 
      "$defaultcores"!1.."$CORES"!1!0 \ 

Je ne suis pas sûr que ce soit un problème de yad ou ma demande. J'ai un radeau de boîtes de dialogue yad et un cahier à carreaux (6 onglets) qui fonctionne bien, dans le même script bash.

Répondre

0

Ceci est votre problème:

Vérifiez les variables

echo $cam1 $cam2 
450D N3300 

Vous voyez, si vous les vérifier individuellement, vous obtiendrez ceci:

echo $cam1 
450D N3300 
echo $cam2 

C'est, $cam1 contient "450D \ nN3300 \ n" et $cam2 contient "". Dans les deux cas $1 est le premier champ du fichier, et $11 est ... rien. Si vous voulez utiliser awk pour cela, vous devez vérifier NR dans la condition.

cam1=$(awk 'NR==1 { print $1 }' "$cam_list") 
cam2=$(awk 'NR==2 { print $1 }' "$cam_list") 
+0

Je vois l'erreur. Toutes les listes et tous les fichiers journaux utilisés sont des lignes continues uniques. Le cam_list est des entrées de ligne séparées. Ce qui ne m'est pas arrivé jusqu'à ce que vous ayez signalé l'erreur. – GeorgeC