Autor |
Sõnum |
zeroconf
Vana Pingviin
Liitunud: 31.03.2007
Postitused: 1068
|
|
On kaustad, igas kaustas on fail ~/v1/cmsimple/config.php.....~/v840/cmsimple/config.php ja seal failis tuleb asendada teema nimi selle kataloogi nimega, mis on ~/v1/templates/ sees.
Selle faili v1/cmsimple/config.php neljas rida on selline:
$cf['site']['template']="subsilverlike";
Seal tuleb see jutumärkide vahel olev nimetus (siin praegu subsilverlike) asendada siis selle kataloogi nimega, mis leitakse ~/v1/templates/ olevat.
Varasem skript jagas teemad ära ent need ei muutu enne aktiivseks kui seadefailis seda öeldud on.
Suutsin niipalju teha, et tekitasin ühe skriptiga tekstifaili, kus need mallide kaustade nimed üksteise all. Kui nüüd saaks need nimed igaüks vastava versiooni config.php faili... Aga lihtsam on vist otse teha kui mingit vahefaili kasutada.
Mõned viited olen leidnud:
http://www.webhostingtalk.com/showthread.php?t=545248
http://www.linuxquestions.org/questions/showthread.php?t=212983
http://www.linuxquestions.org/questions/showthread.php?t=278332
... ja olen aru saanud, et sed, awk vms. on selleks mõeldud... Ent seni ei ole miskit töötavat skripti suutnud välja mõelda selle analoogia põhjal...
isegi sed 's/vana_nimi/uus_nimi/' <config.php >config.php ei tööta. Fail config.php on tühi peale seda....
|
|
|
|
|
|
|
|
priit
Vana Pingviin
Vanus: 40
Liitunud: 04.08.2005
Postitused: 521
Asukoht: Tartu
Distributsioon: CentOS / OS X
|
|
zeroconf kirjutas: | isegi sed 's/vana_nimi/uus_nimi/' <config.php >config.php ei tööta. Fail config.php on tühi peale seda.... |
Kood: | perl -pi'*.bak' -e 's/vana_nimi/uus_nimi/' config.php |
Asendab teeb ÜHE korra asenduse vana_nimi => uus_nimi, kui kõiki on vaja, siis
Kood: | perl -pi'*.bak' -e 's/vana_nimi/uus_nimi/g' config.php |
Internet aitab.
sed töötab ka :)
Kood: | sed -i config.php -e 's/vana_nimi/uus_nimi/' |
st lihtsalt käsurealt sed'i käivitades tegeleb ta stdin-iga, faili jaoks on vaja kasutada võtit -i (edit files in place).
|
|
|
|
Viimati muutis priit 06.08.2007, 23:05; muudetud 2 korda
|
|
|
|
Hardi
Pingviini aktivist
Vanus: 47
Liitunud: 31.10.2005
Postitused: 153
Distributsioon: Arch64
|
|
sed -i "4c\uus_nimi" /bath/failinimi
vahetab teksti faili 4-ndal real
|
|
|
|
|
|
|
|
zeroconf
Vana Pingviin
Liitunud: 31.03.2007
Postitused: 1068
|
|
Hardi kirjutas: | sed -i "4c\uus_nimi" /bath/failinimi
vahetab teksti faili 4-ndal real |
ei ole vaja kogu teksti vaid ainult jutumärkide vahel olev tekst asendada kataloogi nimega, mis ~/v1/cmsimple/templates/ kaustast leitakse:
$cf['site']['template']="subsilverlike";
... ja seda on vaja 840 korda teha, iga kord on kataloogi nimi erinev (v1....v840).
Kuidas teha nii, et sed'ile ei peaks ette andma "vana_nimi" vaid saaks anda nii, et mida ta sealt ~/v1/cmsimple/config.php failis 4-ndalt realt jutumärkidest leiab, seda võtkugi vana nimena. Ja uue nimena võtku seda, mis leitakse kataloogi nimi olevat ~/v1/cmsimple/templates/ kaustas
Hädapärast panna "uus_nimi" väärtuseks ka:
$cf['site']['template']="`ls ~/v1/cmsimple/templates/`";
Üritasin sellist skripti rakendada:
Kood: |
#!/bin/sh
cms_asukoht="/kataloog/kus/asub/840_kataloogi"
var=1
until [ $var1 -ge $1 ]
do
sed -i "4c\$cf['site']['template']="`ls $cms_asukoht/v$var/cmsimple/templates`";" $cms_asukoht/v$var/cmsimple/config.php
((var1+=1))
done
|
kuid veateateks tuleb:
Kood: |
line 4: [: -ge: unary operator expected
ls: /kataloog/kus/asub/840_kataloogi/v1/cmsimple/templates: No such file or directory
|
.... kuigi selline kaust (/cmsimple/templates) on täiesti olemas...
Lahendasin hetkel asja "kirvemeetodil":
1) tekitasin kataloogide nimekirja üksteise alla, kirjutades alltoodud read bashi skripti:
ls v1/templates/ > mallide_nimed.txt
ls v2/templates/ >> mallide_nimed.txt
.....
ls v840/templates/ >> mallide_nimed.txt
Kusjuures need read sain nii, et tekitasin OOo Calc'is mitu veergu selliselt, et number oli eraldi veerg. Siis andsin sammu ette (1,2) paljundasin seeria alla 840 reani. Siis CONCATENATE funktsiooniga liitsin taas kokku tagasi ja sellegi valemi paljundasin topeltklõpsuga lahtri alumisel paremnurgal alla 840 rea võrra. Siis kopeerisin saadud read bashi skripti, salvestasin, käivitasin ja oligi fail mallide nimedega olemas.
Siis kopeerisin saadud kataloogide nimed taas Calc-i ühte veergu ülevalt alla.
2) sama tehnikaga rakendasin rida:
sed -i /kataloog/kus/asub/840_kataloogi/v1/cmsimple/config.php -e 's/vana_nimi/uus_nimi/'
...
sed -i /kataloog/kus/asub/840_kataloogi/v840/cmsimple/config.php -e 's/vana_nimi/uus_nimi/'
... kus uus nimi oli Calc'i kopeeritud mallide nime lahtrist lihtsalt võrdusmärgiga viidatud. Taas CONCATENATE abil see rida kokku, skripti, käima ja oligi olemas.
Seal kus oli nimi juba muudetud - sealt seda "vana_nimi" enam ei leitud ja ilmselt siis ka midagi ei muudetud. Kindlasti saaks miski andeka skripti kirjutada, mis selle korraga ära teeks aga minu vägi sellele praegu peale ei hakanud kuigi uurisin neid juhendeid. Liiga palju uut infot, mida juurde lugeda enne kui üldse midagi juhtuma hakkab. Kui ei ole ikka progeja siis on keeruline nendest laias netis olevatest õpetustest aru saada, mis sageli suhteliselt lakoonilised on.
|
|
|
|
|
|
|
|
priit
Vana Pingviin
Vanus: 40
Liitunud: 04.08.2005
Postitused: 521
Asukoht: Tartu
Distributsioon: CentOS / OS X
|
|
Katsetasin natuke, vajaliku töö sain tehtud järgmise skriptiga (kaustade asukohad olid mul natuke teised, rida oli ka kuues, mitte neljas):
Kood: | #!/bin/bash
cms="/home/priit/test"
for i in `seq 1 840`
do
newtpl="`ls $cms/v$i/templates`"
sed 6c\$cf[\'site\'][\'template\']=\"$newtpl\" -i $cms/v$i/config.php
done |
|
|
|
|
|
|
|
|
zeroconf
Vana Pingviin
Liitunud: 31.03.2007
Postitused: 1068
|
|
priit kirjutas: | Katsetasin natuke, vajaliku töö sain tehtud järgmise skriptiga (kaustade asukohad olid mul natuke teised, rida oli ka kuues, mitte neljas)
done[/code] |
Super - asi tõepoolest töötas! Ma katsetasin seda 5 CM Simple kausta peal ja toimis täiuslikult. Samuti selgus tähelepanelikul vaatlemisel, et soovitud rida oli viies. Veel selgus testimisel, et semikoolon oli puudu - kui seda ei ole siis veebileht ei tööta.
Kate abiga reanumbrid sisse lülitades sai selguse majja. Ühtlasi sain ka aru, et osaliselt on keeruline rida asendada - lihtsam on terve rida soovituga asendada.
Minu testitud versioon siis selline:
Kood: |
#!/bin/bash
cms="/kataloog/kus/asuvad/CMS-i_kataloogid"
for i in `seq 1 5`
do
newtpl="`ls $cms/v$i/templates`"
sed 5c\$cf[\'site\'][\'template\']=\"$newtpl\"\; -i $cms/v$i/cmsimple/config.php
done
|
Kas see muutuja "newtpl" on suvaliselt valitud? Et näiteks vajadusel saaks "newtpl2" jne. valida...
Teistele lugemiseks - käesolev teema sai alguse siit - http://pingviin.org/viewtopic.php?t=3352 kuid siis tekkis uus vajadus ja selle kohta siis see haru siin.
|
|
|
|
|
|
|
|
priit
Vana Pingviin
Vanus: 40
Liitunud: 04.08.2005
Postitused: 521
Asukoht: Tartu
Distributsioon: CentOS / OS X
|
|
zeroconf kirjutas: |
Minu testitud versioon siis selline:
Kood: |
#!/bin/bash
cms="/kataloog/kus/asuvad/CMS-i_kataloogid"
for i in `seq 1 5`
do
newtpl="`ls $cms/v$i/templates`"
sed 5c\$cf[\'site\'][\'template\']=\"$newtpl\"\; -i $cms/v$i/cmsimple/config.php
done
|
Kas see muutuja "newtpl" on suvaliselt valitud? Et näiteks vajadusel saaks "newtpl2" jne. valida...
Teistele lugemiseks - käesolev teema sai alguse siit - http://pingviin.org/viewtopic.php?t=3352 kuid siis tekkis uus vajadus ja selle kohta siis see haru siin. |
Jah, newtpl on suvaliselt valitud nimi. V6id newtpl asemel suvalist muutuja nime kasutada.
|
|
|
|
|
|
|
|
|