Я пытаюсь создать интерфейс 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
Кавычки в заключенной в кавычки строке не имеют значения для оболочки, это делает полевое разделение. Они точно так же, как любой другой символ. Так, когда Вы используете $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
Заключите каждую переменную в кавычки, как так:
zenity --list --title="Choose script" --column="Script" --column="Description" "a.sh" "chaise longue" "b.sh" "moineau"
, я использую этот код для проекта в моей школе, которая может Вы использовать
#!/bin/bash
arg="-u user -pPass -D Database -s -e"
function lista(){
gerentes=$(mysql $arg "SELECT * FROM empleado;")
OIFS=$IFS;
IFS= Первый, я определяю функциональную 'Листу' и называю его в коде 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"
\n';
array=($gerentes)
for ((i=0; i<${#array[@]}; ++i));
do
IFS= Первый, я определяю функциональную 'Листу' и называю его в коде 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"
\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;
}
Первый, я определяю функциональную 'Листу' и называю его в коде 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"