使用 bash 变量构建动态 zenity 列表

使用 bash 变量构建动态 zenity 列表

我正在尝试构建一个 zenity 接口,调用位于特定文件夹中的一组脚本之一。为此,我依靠zenity --list。我希望列表有两列:1) 脚本文件名和 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"

更简单地说,我想了解为什么从终端来看,以下两组命令不能提供类似的结果:

$ 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

带引号的字符串中的引号对于执行字段拆分的 shell 来说无关紧要。它们就像任何其他字符一样。因此,当您使用$TESTSTRING而不是 时"$TESTSTRING",- 中的引号chaise longuemoineau-不要防止字段分裂:

$ 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

答案2

引用每个变量,如下所示:

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

在此处输入图片描述

答案3

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

相关内容