Portál AbcLinuxu, 21. června 2021 09:48


Dotaz: BASH - mezera v proměnné

26.4. 18:10 Milan Uhrák | skóre: 29 | blog: milan_at_ABC
BASH - mezera v proměnné
Přečteno: 449×
Odpovědět | Admin
Zdravím ! Setkal jsem se s takovým podivným chováním ..

Mám soubor, kam napíšu cesty, jednu řádek, např.:
/bin
/etc
/moje\ cesta\ s\ mezerami 
tento soubor načtu pomocí skriptu (v bashi) příkazem :
content=$( tr "\n" " "  < $MUJ_SOUBOR )
echo "Content:" $content
Proměnná $MUJ_SOUBOR obsahuje název souboru a echo vypíše cesty tak, že konce řádků nahradí mezerou :
Content : /bin /etc /moje\ cesta\ s\ mezerami
Myslím, že dosud je to dobře. teď tu proměnnou s cestami dám squshfs :
(se zapnutým set -x to ukáže 
+ mksquashfs /bin /etc '/moje\' 'cesta\' 's\' mezerami /backup.sqsh
Cannot stat source directory "/moje\" because No such file or directory
)
mksquashfs $content "/backup.sqsh"
Zkoušel jsem různé postupy načtení a podsunutí $content mksquasfs, ale bezvýsledně ...

V čem dělám chybu ?

Děkuji předem za navedení..

Milan

Ř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

26.4. 18:31 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: BASH - mezera v proměnné
Odpovědět | | Sbalit | Link | Blokovat | Admin
Zapomínáš na uvozovky kolem názvů proměnných. Nepředávej to jako string, ale jako pole stringů.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Řešení 2× (DaBler, Milan Uhrák (tazatel))
26.4. 18:43 Vlado99 | skóre: 8 | blog: vlado99
Rozbalit Rozbalit vše Re: BASH - mezera v proměnné
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ahoj.

Asi takto:

Vstupný súbor:
/bin                                                                                                                                                         
/etc                                                                                                                                                         
/moje cesta s mezerami                                                                                                                                       
Skript:
#!/bin/bash

declare -a CONTENT
readarray -t CONTENT < "$MUJ_SOUBOR"
echo "Content:" "${CONTENT[@]}"

mksquashfs "${CONTENT[@]}" "/backup.sqsh"
26.4. 18:51 Milan Uhrák | skóre: 29 | blog: milan_at_ABC
Rozbalit Rozbalit vše Re: BASH - mezera v proměnné
Bože !!

díky moc !

Milan
29.4. 18:23 BFU
Rozbalit Rozbalit vše Re: BASH - mezera v proměnné
Ta zavislost na bashi je nutna ? Tohle by melo stacit taky, proste kolem kazdeho radku udelat uvozovky a nacpat to mksquashfs jako parametry, akorat to casem narazi na delku commandliny a soubory s uvozovkama v nazvu by pak asi slo podrtit sedem taky:

$ eval mksquashfs `sed 's@.*@\"&\"@' /tmp/seznam-souboru` /tmp/squashfs.out

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.