web-dev-qa-db-ja.com

bash変数を使用した動的なZenityリストの構築

特定のフォルダーにある一連のスクリプトの1つを呼び出すZenityインターフェイスを構築しようとしています。このために、私はzenity --listに依存しています。リストには2つの列が必要です。1)スクリプトファイル名と2)説明テキスト[スクリプトファイル自体の中の3番目の行のコメントから]。

問題なく、ファイル名のみのインターフェイスの単一列を作成できます。ここで問題が発生するのは、説明のために2番目の列を使用して、次の例を模倣しようとする場合です。

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"

もっと簡単に言うと、次の2つのコマンドセットが端末から同様の結果を提供しない理由を理解したいと思います。

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

そして

$ 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

引用符で囲まれた文字列内の引用は、フィールド分割を行うシェルにとって重要ではありません。他のキャラクターと同じです。そのため、$TESTSTRINGの代わりに"$TESTSTRING"を使用すると、その中の引用符-chaise longueおよびmoineauを囲む引用符-しないはフィールドの分割を防ぎます。

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

必要な分割を保持する場合は、配列を使用します。

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

MySqlを使用した動的リスト

私はあなたが使用できる私の学校のプロジェクトにこのコードを使用します

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

まず、関数 'lista'を定義し、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

次のように各変数を引用します。

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

enter image description here

0