Portál AbcLinuxu, 19. července 2025 20:29


Dotaz: Bash otevreni a nacteni souboru

3.5.2012 19:26 Bass
Bash otevreni a nacteni souboru
Přečteno: 364×
Odpovědět | Admin
Dobry den,

rad bych se poradil ohledne reseni nasledujiciho problemu s jednoduchym skriptem v Bashi. Pokousim se pro kazdy soubor z listu souboru nacist v souboru nejaka ridici data,ale nedari se mi jej zprovoznit. Pri spusteni skriptu se vypise chyba prav, pritom soubory jsou me a veskere skripty probihaji v mem adresari.

#!/bin/bash

function readCenterGridBox() {

fname=$1; counter=0;

for i in $(cat $fname); do result[counter]=$i;

counter = counter + 1;

done

}

dlist=$(find ~/DOC -type d)

for dname in $dlist ; do

position=readCenterGridBox $dname"/cdk.txt"

echo $position[0];

echo -e "\n"

done

Dekuji za odpoved.


Řešení dotazu:


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

Odpovědi

3.5.2012 19:46 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Bash otevreni a nacteni souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin

Především: jak přesně zní to chybové hlášení?

Jinak si očividně neděláte těžkou hlavu s mezerami v názvech souborů a adresářů, ale je docela dobře možné, že tam žádné nemáte. A tohle

counter = counter + 1;

nemůže fungovat. Správně můžete použít

counter=$[counter + 1]

případně

: $[counter++]

nebo rovnou

result[$[counter++]]="$i"

nebo dokonce

result[${result[*]}]="$i"
3.5.2012 19:47 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Bash otevreni a nacteni souboru
Mimochodem, nezní ta chybová hláška čirou náhodou tak, že shell nemůže spustit příkaz counter? :-)
3.5.2012 19:51 Marble | skóre: 27 | blog: marble
Rozbalit Rozbalit vše Re: Bash otevreni a nacteni souboru
Ne counter, ale cdk.txt. :) Ta funkce se nikde nevolá.
3.5.2012 19:47 Marble | skóre: 27 | blog: marble
Rozbalit Rozbalit vše Re: Bash otevreni a nacteni souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Chybu, co vidíš, ti způsobuje řádek position=readCenter..., který zaprvé asi není to, cos chtěl napsat, a zadruhé do proměnné position uloží string "readCenterGridBox" (po mezeru) a následně se snaží spustit ten cdk.txt soubor, který nemá executable práva, proto ta chyba. Nicméně podivností a chyb máš v té ukázce výrazně víc. Hned další budou chybějící dvojité závorky u counter+1 (a naopak přebývající mezery u rovnítka tamtéž). Zbytek asi půjde spustit ale rozhodně nebude dělat to, co chceš (at už je to cokoliv :).
3.5.2012 20:10 Bass
Rozbalit Rozbalit vše Re: Bash otevreni a nacteni souboru
ach ta syntax:-) Chyba je opravdu v tom radku position=readCenter... Dekuji za pomoc, jiz to funguje.
3.5.2012 20:51 Kit
Rozbalit Rozbalit vše Re: Bash otevreni a nacteni souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Chápu správně, že ten skript má v adresáři ~/DOC vyhledat všechny soubory cdk.txt a z každého vypsat první slovo? Takto se to ale v shellu nedělá. Pokud by ta adresářová struktura byla plochá, stačilo by např. tohle:
for soubor in ~/DOC/*/cdk.txt; do
  read w1 w2 <"$soubor";
  echo -e "$w1\n";
done
4.5.2012 07:33 alkoholik | skóre: 40 | blog: Alkoholik
Rozbalit Rozbalit vše Re: Bash otevreni a nacteni souboru
Kvuli moznym mezeram v nazvu souboru po expanzi * se presne tohle nedela.
4.5.2012 08:45 Kit
Rozbalit Rozbalit vše Re: Bash otevreni a nacteni souboru
Můžu vidět příklad, kdy mé řešení nebude fungovat? Mezery to s přehledem zvládne.
4.5.2012 09:25 alkoholik | skóre: 40 | blog: Alkoholik
Rozbalit Rozbalit vše Re: Bash otevreni a nacteni souboru
No dobre rano.
;)
Mel bych psat az poradne nabootuju..
4.5.2012 09:23 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Bash otevreni a nacteni souboru
Nemáte pravdu. Expanze wildcards se provádí až v rámci word splitting, takže v této konstrukci mezery v názvech souborů nevadí.

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.