Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.

Autor Téma: for cyklus [VYŘEŠENO]  (Přečteno 2242 krát)

3.14.TR

for cyklus [VYŘEŠENO]
« kdy: 11 Červen 2013, 16:44:00 »
ahoj ahoj,
prosím o radu, podle všech možných tutoriálů by měl následující kód napsal na každou řádku jeden soubor/složku v kořeni
Kód: [Vybrat]
for file in "/*"; do
echo "$file"
done
nicméně můj výstup v konzoli je jednořádkový
Kód: [Vybrat]
/bin /boot /cdrom /dev /etc /home /initrd.img /initrd.img.old /lib /lib64 /lost+found /media /mnt /opt /proc /root /run /sbin /selinux /srv /sys /tmp /usr /var /vmlinuz /vmlinuz.old protože se do proměnné $file uloží celý tenhle string najednou (důkaz tady)
Kód: [Vybrat]
for file in "/*"; do
echo "$file"
break
done
tím celý for ztrácí smysl, potřebuju postupně přistupovat k jednotlivým souborům
nefunguje ani z terminálu ani ze skriptu, ovšem na Gentoo a FreeBSD to jde

Mám počeštěné Ubuntu 12.10
Díky moc za rady
« Poslední změna: 11 Červen 2013, 19:58:42 od 3.14.TR »
CPU Intel Core i5 2500 (4 jádra po 3.3GHz); RAM Kingston HyperX (2x2GB, DDR3); VGA nV GIGABYTE GTS450

beer

  • Host
Re:for cyklus
« Odpověď #1 kdy: 11 Červen 2013, 17:14:55 »
co nějak takto:

Kód: [Vybrat]
find *|while read line; do něco "$line"; done

Vojtěch Trefný

  • Zasloužilý Ubunťák
  • Guru
  • *
  • Příspěvků: 9303
  • Karma: +877/-85
  • Don Quijote
    • Zobrazit profil
Re:for cyklus
« Odpověď #2 kdy: 11 Červen 2013, 17:17:06 »
Kód: [Vybrat]
for file in `ls /` ;do echo $file ;done

3.14.TR

Re:for cyklus
« Odpověď #3 kdy: 11 Červen 2013, 18:44:05 »
co nějak takto:

Kód: [Vybrat]
find *|while read line; do něco "$line"; done
ano ano, díky, to funguje :) díky

Kód: [Vybrat]
for file in `ls /` ;do echo $file ;done
ls se snažím vyhnout - resp ho nahradit tímhle programem (nesmějte se mi, je to do školy)

otázkou zůstává, proč nefunguje ten cyklus standartně, jako kdekoli jinde (viz výše zmíněné systémy nebo můj notebook se stejnou verzí Ubuntu)

každopádně díky za tipy :)
CPU Intel Core i5 2500 (4 jádra po 3.3GHz); RAM Kingston HyperX (2x2GB, DDR3); VGA nV GIGABYTE GTS450

GdH

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 3045
  • Karma: +484/-17
    • Zobrazit profil
    • GdH-Notes
Re:for cyklus
« Odpověď #4 kdy: 11 Červen 2013, 19:53:12 »
otázkou zůstává, proč nefunguje ten cyklus standartně, jako kdekoli jinde (viz výše zmíněné systémy nebo můj notebook se stejnou verzí Ubuntu)

Nesmíš dát ten regulární výraz do uvozovek. Ve tvém případě sice k expanzi dojde, ale vytvoří se jen jeden řádek, cyklus bude mít je jeden průchod.

Edit: Nečetl jsem to poprvé pořádně, takže druhou větu jsem psal zbytečně :)
« Poslední změna: 11 Červen 2013, 19:57:28 od GdH »

3.14.TR

Re:for cyklus
« Odpověď #5 kdy: 11 Červen 2013, 19:58:19 »
otázkou zůstává, proč nefunguje ten cyklus standartně, jako kdekoli jinde (viz výše zmíněné systémy nebo můj notebook se stejnou verzí Ubuntu)

Nesmíš dát ten regulární výraz do uvozovek. Ve tvém případě sice k expanzi dojde, ale vytvoří se jen jeden řádek, cyklus bude mít je jeden průchod.

Edit: Nečetl jsem to poprvé pořádně, takže druhou větu jsem psal zbytečně :)

jéééé, díky, moje blbost, je to jasné... ale pořád nechápu, že to na notebooku funguje (a na Gentoo taky)
CPU Intel Core i5 2500 (4 jádra po 3.3GHz); RAM Kingston HyperX (2x2GB, DDR3); VGA nV GIGABYTE GTS450

GdH

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 3045
  • Karma: +484/-17
    • Zobrazit profil
    • GdH-Notes
Re:for cyklus
« Odpověď #6 kdy: 11 Červen 2013, 20:04:27 »
... ale pořád nechápu, že to na notebooku funguje (a na Gentoo taky)

Troufal bych si říct, že ani tam ne ;)

3.14.TR

Re:for cyklus
« Odpověď #7 kdy: 11 Červen 2013, 20:13:20 »
... ale pořád nechápu, že to na notebooku funguje (a na Gentoo taky)

Troufal bych si říct, že ani tam ne ;)

ale jo, mám ssh do školy...
CPU Intel Core i5 2500 (4 jádra po 3.3GHz); RAM Kingston HyperX (2x2GB, DDR3); VGA nV GIGABYTE GTS450

pacholik

  • Závislák
  • ****
  • Příspěvků: 2072
  • Karma: +256/-16
    • Zobrazit profil
Re:for cyklus [VYŘEŠENO]
« Odpověď #8 kdy: 11 Červen 2013, 21:24:08 »
Řek bych že jádro pudla bude v těch uvozovkách. Ale i tak mi to vrtá hlavou, protože "/*" mi všude expanduje prostě na /*.

ntz_reloaded

  • Lokaj
  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 3727
  • Karma: +363/-65535
  • skill :: ur home erly
    • Zobrazit profil
Re:for cyklus [VYŘEŠENO]
« Odpověď #9 kdy: 11 Červen 2013, 21:37:09 »
tikejte mi, taky Vam tikam ...
song of the day - openSUSE, openindiana, DuckDuckGo
The noise ain't noise anymore, who's to blame, WHO'S TO BLAME ??