Portál AbcLinuxu, 27. října 2025 10:02
var=$(dialog --ascii-lines --menu "Hlavní menu" 0 100 0 \ 1 "Obsluha Apache" \ 2 "Obsluha MySQL" \ 3 "Obsluha PHP" 2>&1 >/dev/tty)Když ale nechci nic posílat do nějakého dev/tty (coz ani nevim co to presne je, jen jsem dohledal, ze se to tam posila pri nejake chybe) tak to proste smazu a v ten moment je script nefunkcni
var=$(dialog --ascii-lines --menu "Hlavní menu" 0 100 0 \ 1 "Obsluha Apache" \ 2 "Obsluha MySQL" \ 3 "Obsluha PHP")Poradí někdo správný zapis ? Díky
Řešení dotazu:
var=$(dialog --ascii-lines --stdout --menu "Hlavní menu" 0 100 0 \ 1 "Obsluha Apache" \ 2 "Obsluha MySQL" \ 3 "Obsluha PHP")
dialog --ascii-lines --menu "Hlavní menu" 0 100 0 \ 1 "Obsluha Apache" \ 2 "Obsluha MySQL" \ 3 "Obsluha PHP"Jak bych pak mohl třeba pomocí "case" rozlišit to na co se kliklo? Děkuji
case $var in
1)
echo "Indian";
;;
2)
echo "Muj dotazovaci jazyk";
;;
3)
echo "PHP: hypertextovy preprocesor";
;;
*)
echo "Vsechno vedle";
;;
esac
DATA=("Obsluha Apache" "Obsluha MySQL" "Obsluha PHP")
DATA2=(apache mysql php)
var=$(dialog --ascii-lines --stdout --menu "Hlavní menu" 0 100 0 \
for i in ${!DATA[*]}
do
$i")" ${DATA[$i]}
done)
case $var in
for i in ${!DATA2[*]}
do
$i")" ${DATA2[$i]};;
done
esac
var=$(dialog --ascii-lines --stdout --menu "Hlavní menu" 0 100 0 \ apache "Obsluha Apache" \ mysql "Obsluha MySQL" \ php "Obsluha PHP") $var
Nasledujici postup plati pouze pro bash, pro jine shell kompatibilni interpretery fungovat nebude a je potreba to udelat trochu sloziteji.
Na vysvetlenou:
#!/bin/bash
declare -A descriptions=(
[apache]="Obsluha Apache" \
[mysql]="Obsluha MySQL" \
[php]="Obsluha PHP");
menuItems="";
for key in ${!descriptions[@]}; do
menuItems="$(echo $menuItems $key \"${descriptions[$key]}\")";
done;
echo $menuItems;
menuItems="dialog --ascii-lines --stdout --menu \"Hlavní menu\" 0 100 0 $menuItems";
var=$(eval $menuItems);
echo "Volba: $var";
menuItems="$menuItems $key \"${descriptions[$key]}\"";
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.