Portál AbcLinuxu, 13. května 2025 22:41

Dotaz: Jak dostat v BASHI výsledek z ls do menu

20.7.2012 17:18 Martin
Jak dostat v BASHI výsledek z ls do menu
Přečteno: 297×
Odpovědět | Admin
Ahoj, prosím o pomoc, už fakt nevím jak na to.

Při použití
ls /home/ | while read DIR
do
	echo $DIR
done
dostanu výsledek
20_07_2012_16_04_05_backup_http
20_07_2012_16_04_08_backup_http
20_07_2012_16_04_26_backup_http
20_07_2012_16_04_35_backup_http
a potřebuji označit jeden ten adresář z nějakého menu, něco jako tohle
echo "MENU"
01 - 20_07_2012_16_04_05_backup_http
02 - 20_07_2012_16_04_08_backup_http
03 - 20_07_2012_16_04_26_backup_http
04 - 20_07_2012_16_04_35_backup_http

echo -n " Zadejte Vaši volbu : "
read choice

case $choice in
01) echo "1";;
02) echo "2";;
03) echo "3";;
04) echo "2";;
esac
Poradíte prosím někdo? Děkuji

Řešení dotazu:


Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

pepe_ avatar 20.7.2012 17:34 pepe_ | skóre: 48
Rozbalit Rozbalit vše Re: Jak dostat v BASHI výsledek z ls do menu
Odpovědět | | Sbalit | Link | Blokovat | Admin

a co za pomoci programu dialog , nebude to hezčí ?

20.7.2012 18:26 Martin
Rozbalit Rozbalit vše Re: Jak dostat v BASHI výsledek z ls do menu
Jistě by to hezčí bylo, ale potřebuji to klasickou cestou.. tj bez použití dialogu. Ale díky za tip ;)
Řešení 1× (frEon)
20.7.2012 18:07 pavel
Rozbalit Rozbalit vše Re: Jak dostat v BASHI výsledek z ls do menu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Prosím tě, snaž se příště trochu hledat na internetu.

Příklad 1:
#!/bin/bash

dirs=(*/)

read -p "$(
        f=0
        for dirname in "${dirs[@]}" ; do
                echo "$((++f)): $dirname"
        done

        echo -ne 'Please select a directory > '
)" selection

selected_dir="${dirs[$((selection-1))]}"

echo "You selected '$selected_dir'"


Příklad 2:

#!/bin/bash
printf "Please select folder:\n"
select d in */; do test -n "$d" && break; echo ">>> Invalid Selection"; done
cd "$d" && pwd


Funguje to v bashi, pro jiný shel (sh) by to snad někdo mohl upravit.
20.7.2012 18:17 Martin
Rozbalit Rozbalit vše Re: Jak dostat v BASHI výsledek z ls do menu
Já jsem nic nehledal, celou donu čekám až mě sem pastnete takovou sračku :-(
20.7.2012 18:31 pavel
Rozbalit Rozbalit vše Re: Jak dostat v BASHI výsledek z ls do menu
Ty mě taky.
pepe_ avatar 20.7.2012 23:00 pepe_ | skóre: 48
Rozbalit Rozbalit vše Re: Jak dostat v BASHI výsledek z ls do menu

Zamknout a zahodit klíče.

21.7.2012 01:47 Patrik Uhrak | skóre: 31 | blog: pato
Rozbalit Rozbalit vše Re: Jak dostat v BASHI výsledek z ls do menu
Odpovědět | | Sbalit | Link | Blokovat | Admin

Takto by to mohlo vyzerat tiez, je tam aj co to osetrene.

#!/bin/bash

## Je mozne zadat top level adresar ako argument pre skript: script /home
## ,ak nie je zadany, tak sa berie aktualny adresar, kde sa nachadzame.
## treba odkomentovat 
#top_dir="$1"
#def_top_dir="${top_dir:-$PWD}"
## zakomentovat nasledovny riadok, ak sa pouzije predchadzajuci sposob zadavania top level adresara. 
def_top_dir="/home/"
declare -i index=1 select
declare -a array_dirs=( "$def_top_dir"/*/ )

# overenie, ci je adresar dostupny na citanie
[[ -r "$def_top_dir" ]] || { echo "$def_top_dir neexistuje alebo je necitatelny."; exit 1; }
# ak by sa nenasiel ziadny podadresar, tak nedojde k expanzii a tym padom by prvy a jediny
# prvok v poli bol "$def_top_dir"/*/; pole bude vzdy obsahovat aspon jeden prvok
[[ -d "${array_dirs[1]}" ]] || { echo "V $def_top_dir sa ziadne podadresare nenasli."; exit 1; }


for item in "${array_dirs[@]}"
do
        # pole ma index zacinajuci od 0, no pre cloveka (pre mna) ,  je
        # logickejsie prvy prvok nez nulty prvok, preto $(( index - 1 ))
        echo "$index : ${array_dirs[$(( $index - 1 ))]}"
        (( index++ ))
done

while read -p "Zadaj index pozadovaneho adresara : " select
do
        (( 0 < select )) && (( select <= ${#array_dirs[@]} )) && break || echo "Index je mimo rozsahu [ 1 - ${#array_dirs[@]} ]."
done

echo "${array_dirs[$(( $select - 1 ))]}"

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.