Sida 1 av 1
Resultat av basename *.pot .pot till script [LÖST]
Postat: 24 aug 2008, 08:41
av TicToc
Idag har jag ett script jag vill förbättra, nu ser det ut så här:
Kod: Markera allt
#!/bin/bash
SOURCEFILE=$1
if [ -z $SOURCEFILE ]; then
echo "No source file specified"
exit 1
fi
msgfmt sv.po
msgfmt sv.po -o $SOURCEFILE
sudo cp $SOURCEFILE /usr/share/locale/sv/LC_MESSAGES/
Nu vill jag slippa ange ett argument och låta
"skapa" argumentet, problemet är att jag inte har en susning om hur jag skall bära mig åt!
.mo måste också läggas till det nya namnet.
Re: Resultat av basename *.pot .pot till script från script
Postat: 24 aug 2008, 09:37
av Lars
Jag vet inte riktigt om jag förstår vad du vill göra, men det här ger dig kanske några ideer:
Kod: Markera allt
for f in *.pot; do
echo $(basename $f .pot).mo
done
Eller så kan du bara ersätta "pot" med "mo" så här (sök på "Parameter Expansion" i man bash):
Re: Resultat av basename *.pot .pot till script från script
Postat: 24 aug 2008, 09:55
av TicToc
Tack, nu ser den ut så här och jag är nöjd.
Kod: Markera allt
#!/bin/bash
FILE=$1
if [ -z $FILE ]; then
for f in *.pot; do
FILE=${f/%pot/mo}
done
fi
msgfmt sv.po
msgfmt sv.po -o $FILE
sudo cp $FILE /usr/share/locale/sv/LC_MESSAGES/
Re: Resultat av basename *.pot .pot till script [LÖST]
Postat: 24 aug 2008, 10:35
av Lars
Jag förstod det som att det finns flera pot-filer i katalogen och att du vill använda alla, det var därför jag lade in en for-slinga. Men om det ska funka som det är tänkt måste du ju använda $FILE inom slingan också, annars förstörs ju $FILE i varje varv.
Re: Resultat av basename *.pot .pot till script [LÖST]
Postat: 24 aug 2008, 10:46
av TicToc
Nej, det finns bara en pot-fil i varje katalog. Men jag hade kvar skäp ser jag nu. Den städade ser ut som följer. loopen är altså onödig, men hur skall den ersättas?'
Kod: Markera allt
#!/bin/bash
for f in *.pot; do
FILE=${f/%pot/mo}
done
msgfmt sv.po -o $FILE
sudo cp $FILE /usr/share/locale/sv/LC_MESSAGES/
Re: Resultat av basename *.pot .pot till script [LÖST]
Postat: 24 aug 2008, 11:16
av Konservburk
Du vet alltså att det bara kan finnas en enda .pot-fil i katalogen. Men du vet inte vad den heter? Annat än att filnamnet slutar på ".pot"?
Re: Resultat av basename *.pot .pot till script [LÖST]
Postat: 24 aug 2008, 11:21
av TicToc
Konservburk skrev:Du vet alltså att det bara kan finnas en enda .pot-fil i katalogen. Men du vet inte vad den heter? Annat än att filnamnet slutar på ".pot"?
Just så. Tänk om jag också kunde uttrycka mig lika tydligt.
Re: Resultat av basename *.pot .pot till script [LÖST]
Postat: 24 aug 2008, 11:28
av Konservburk
Då kan du göra typ så här:
Men det kommer bara fungera om det finns 1 och endast 1 .pot-fil i katalogen. Jag tar inget ansvar för vad som händer om det skulle råka finnas 0, 2, eller flera när du kör skriptet.
Eftersom du dessutom inte vet exakt vad .pot-filen heter så bör du även se till att alltid använda "$FILE" istället för $FILE om du vill undvika problem med t.ex. mellanrum i filnamnet.
Re: Resultat av basename *.pot .pot till script [LÖST]
Postat: 24 aug 2008, 12:28
av TicToc
Oj, det här var ju inte riktigt löst trots rubriken.
Dina två rader funkar inte för mig, resultatet blir *.mo som filnamn, och det blir inte bra. Jag ville alltså ta ut namnet från pot-filen för att skapa en mo-fil.
Nu kör jag det här som verkar funka.
Kod: Markera allt
#!/bin/bash
FILE=$(basename *.pot .pot).mo
msgfmt sv.po -o "$FILE"
sudo cp "$FILE" /usr/share/locale/sv/LC_MESSAGES/