jak na datum v .sh
Dan Lukes
dan at obluda.cz
Sun Jun 22 22:01:50 CEST 2003
Milan Cizek wrote:
> na to, jak to spravne zkombinovat, po dvouhodinovem (hruza :-)) badani
> jsem stvoril nasledujici, ale funguje to jen napul - t.j. cas i koncovka
> chybi. Zkousel jsem u ruzne kombinace s uvozovkama/apostrofama, co mam
> spatne? :( Dik
>
> #!/bin/sh
> tar czvf backup-$(date +"%d.%m.%Y %H-%M").tar.gz /usr/local/etc/ /etc/
Zdravim.
Spravne jsi mezitim prisel na to, ze vadi mezera. Nespravne jsi ale
vydedukoval, ze v nazvu souboru.
Je to treba vzit trochu zesiroka:
tar ma spoustu ruznych optionu. Jeden z nich je take option 'f' za
kterym se ocekava nazev zarizeni nebo souboru, to ktereho se ma archiv
vytvorit. Ten nazev musi byt prave jeden.
Standardnim oddelovacem parametru na prikazove radce je mezera.
A ted se vratme se k tvemu problemu.
date +"%d.%m.%Y %H-%M" po svem spusteni vraci neco takoveho:
22.06.2003 21-42
takze prepisme jak vypada cely prikaz po expanzi tohoto data:
tar czvf backup-22.06.2003 21-42.tar.gz /usr/local/etc/ /etc/
Receno lidskym jazykem - prejeme si vytvorit GZIPem pakovany archiv se
jmenem backup-22.06.2003 (to je prvni parametr za 'f') a prejeme si to
jen umistit nasledujici soubory a adresare: 21-42.tar.gz /usr/local/etc/
/etc/ (ten prvni patrne neexistuje)
Shell neni delfska vestirna - neni schopen rozeznat, ze jedna z mezer na
prikazovem radku neznamena oddelovac, nybrz je soucasti jmena souboru.
Takze, jak z toho ?
Potrebujeme nejak rict, ze tato konkretni mezera neni oddelovacem
parametru, ale je obycejnou mezerou - jinymi slovy, chceme zrusit jeji
specialni vyznam. Mezera ztraci svuj specialni vyznam v zasade tremi
zpusoby - tim, ze pred ni dame backslash, nema ho, pokud je soucasti
retezce delimitovaneho uvozovkami a nema ho, pokud je soucasti retezce
delimitovaneho apostrofy.
Uzavreni do apostrofu se nam v tomto pripade nehodi, protoze v
apostrofech by nam ztratil svuj specialni vyznam i '$' a prestal by nam
chodit konstrukt $(...).
Prvni zpusob pouzit muzeme:
tar czvf backup-$(date +"%d.%m.%Y\ %H-%M").tar.gz /usr/local/etc/ /etc/
date nam tak vygeneruje datum s mezerou vcetne potrebneho backslashe
pred ni
Druhy zpusob take pouzit muzeme:
tar czvf "backup-$(date +'%d.%m.%Y %H-%M').tar.gz" /usr/local/etc/ /etc/
nazev obsahujici mezeru je uzavren v uvozovkach, takze je zrejme, ze
mezera nemuze byt oddelovacem. Vsimni si, ze u date jsem uvozovky
nahradil apostrofy - to abych se vyhnul problemum s uvozovkami v
uvozovkach (ne, ze by to byl problem neresitelny, ale proc si
komplikovat zivot ...)
Doufam, ze takhle ti to pomuze (i kdyz je to dlouhe) vic, nez kdybych
ti napsal jen samotny jeden opraveny radek.
Mimochodem, zkus uvazit, jestli by nestalo zato nekde trochu nastudovat
jak funguje prikazova radka v sh - je to pomerne zaklad toho, co dost
nutne potrebujes, respektive, usetris si strasne mnozstvi problemu,
pokud si s timhle budes tykat ...
Dan
More information about the Users-l
mailing list