/ Forside / Teknologi / Operativsystemer / Linux / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Linux
#NavnPoint
o.v.n. 11177
peque 7911
dk 4814
e.c 2359
Uranus 1334
emesen 1334
stone47 1307
linuxrules 1214
Octon 1100
10  BjarneD 875
At finde igår med sh
Fra : Morten Guldager


Dato : 08-02-06 08:20

Hejsa,

På en gammel UNIX kasse, som ikke er modtagelig for gnu tools,
skal jeg i et Bourne Shell program finde frem til hvilken dag
det var igår. (c kompiler har den naturligvis heller ikke)

Jeg har forsøgt mig med

IGAAR=`TZ=MET+24 date`

men den kan så ikke rigtig finde ud af tidszonen. (tror det er UTZ/GMT)

Så kunne jeg jo korrigere ved at skrive

TZ=MET+23 date

Men det holder jo kun indtil vi får sommertid.

Forslag til en simpel løsning?


/Morten

 
 
Mogens Kjaer (08-02-2006)
Kommentar
Fra : Mogens Kjaer


Dato : 08-02-06 08:51

Morten Guldager wrote:
> Hejsa,
>
> På en gammel UNIX kasse, som ikke er modtagelig for gnu tools,
> skal jeg i et Bourne Shell program finde frem til hvilken dag
> det var igår. (c kompiler har den naturligvis heller ikke)

Når du skriver "dag", mener du så år/måned/dag, ugedag eller hvad?

Den date, du har, hvad kan den så?

Min SGI IRIX (ikke gnu) date kan fx:

$ date +%Y
2006
$ date +%m
02
$ date +%d
08

Så kan man så lave aritmetik derfra. Husk skudår

Mogens

--
Mogens Kjaer, Carlsberg A/S, Computer Department
Gamle Carlsberg Vej 10, DK-2500 Valby, Denmark
Phone: +45 33 27 53 25, Fax: +45 33 27 47 08
Email: mk@crc.dk Homepage: http://www.crc.dk

Ukendt (08-02-2006)
Kommentar
Fra : Ukendt


Dato : 08-02-06 08:52

Morten Guldager wrote:
>
> Forslag til en simpel løsning?

Virker "date -d -1day"?

--
Kasper Dupont -- Rigtige mænd skriver deres egne backupprogrammer
#define _(_)"d.%.4s%."_"2s" /* This is my new email address */
char*_="@2kaspner"_()"%03"_("4s%.")"t\n";printf(_+11,_+6,_,6,_+2,_+7,_+6);

Peter Makholm (08-02-2006)
Kommentar
Fra : Peter Makholm


Dato : 08-02-06 09:01

Morten Guldager <Morten.Guldager@gmail.com> writes:

> Jeg har forsøgt mig med
>
> IGAAR=`TZ=MET+24 date`

Nej, MET+24 er ikke en korrekt tidszoneangivelse.

> Forslag til en simpel løsning?

Det ser ikk eud til at der er en simpel løsning med den date(1) der er
beskrevet i Posix. Du bliver vist nødt tiol at regne.

--
Peter Makholm | Emacs is the only modern general-purpose
peter@makholm.net | operating system that doesn't multitask
http://hacking.dk |

Morten Guldager (09-02-2006)
Kommentar
Fra : Morten Guldager


Dato : 09-02-06 08:08

2006-02-08 Peter Makholm wrote
> Morten Guldager <Morten.Guldager@gmail.com> writes:
>
>> Jeg har forsøgt mig med
>>
>> IGAAR=`TZ=MET+24 date`
>
> Nej, MET+24 er ikke en korrekt tidszoneangivelse.
>
>> Forslag til en simpel løsning?
>
> Det ser ikk eud til at der er en simpel løsning med den date(1) der er
> beskrevet i Posix. Du bliver vist nødt tiol at regne.

Nej tak, så hellere kode... En kollega fandt følgende på nettet:

#!/bin/sh

DH=`date +%D:%H`
s=-15
while [ $s -le 14 ]
do
s=`expr $s + 1`
[ `TZ=GMT$s date +%D:%H` = $DH ] && break
done

H=`date +%H`
s=`expr $s - 2 + 24`
end=`expr $s + 4`
while [ $s -le $end ]
do
s=`expr $s + 1`
[ `TZ=GMT$s date +%H` = $H ] && break
done

answer=`TZ=GMT$s date +"%Y%m%d"`

# Finally, check if we have gone past midnight during the run
[ `date +%D:%H` != $DH ] && exec $0

# We're done.
echo "$answer"


Det virker faktisk alle de steder jeg har testet det indtil videre.
Men helt vildt let forståeligt er det nu ikke, synes jeg.


/Morten

Jan Birk (08-02-2006)
Kommentar
Fra : Jan Birk


Dato : 08-02-06 13:22

> På en gammel UNIX kasse, som ikke er modtagelig for gnu tools,
> skal jeg i et Bourne Shell program finde frem til hvilken dag
> det var igår. (c kompiler har den naturligvis heller ikke)

På de fleste gamle Unix kasser findes awk. Hvis du har den, kan du måske
bruge awk's sysdate() som returnerer sekunder siden epoc og så trække en
døgns sekunder fra og vise resultatet med strftime()!

/Jan

Morten Guldager (09-02-2006)
Kommentar
Fra : Morten Guldager


Dato : 09-02-06 08:03

2006-02-08 Jan Birk wrote
>> På en gammel UNIX kasse, som ikke er modtagelig for gnu tools,
>> skal jeg i et Bourne Shell program finde frem til hvilken dag
>> det var igår. (c kompiler har den naturligvis heller ikke)
>
> På de fleste gamle Unix kasser findes awk. Hvis du har den, kan du måske
> bruge awk's sysdate() som returnerer sekunder siden epoc og så trække en
> døgns sekunder fra og vise resultatet med strftime()!

Umiddelbart lyder det jo ganske genialt.

Jeg skrev følgende awk program:

awk 'BEGIN {print strftime("%Y%m%d", systime()-3600*24)}'

Og på min linux virker det helt perfekt.

Men selv på en Solaris-9 fejler det:

# awk 'BEGIN {print strftime("%Y%m%d", systime()-3600*24)}'
awk: syntax error near line 1
awk: illegal statement near line 1

Det går cirka lige så dårligt på de rigtig gamle kasser jeg
bakser med.


/Morten

Kristian Vilmann (09-02-2006)
Kommentar
Fra : Kristian Vilmann


Dato : 09-02-06 10:05

Morten Guldager wrote:
> 2006-02-08 Jan Birk wrote
>
>>>På en gammel UNIX kasse, som ikke er modtagelig for gnu tools,
>>>skal jeg i et Bourne Shell program finde frem til hvilken dag
>>>det var igår. (c kompiler har den naturligvis heller ikke)
>>
>>På de fleste gamle Unix kasser findes awk. Hvis du har den, kan du måske
>>bruge awk's sysdate() som returnerer sekunder siden epoc og så trække en
>>døgns sekunder fra og vise resultatet med strftime()!
>
>
> Umiddelbart lyder det jo ganske genialt.
>
> Jeg skrev følgende awk program:
>
> awk 'BEGIN {print strftime("%Y%m%d", systime()-3600*24)}'
>
> Og på min linux virker det helt perfekt.
>
> Men selv på en Solaris-9 fejler det:
>
> # awk 'BEGIN {print strftime("%Y%m%d", systime()-3600*24)}'
> awk: syntax error near line 1
> awk: illegal statement near line 1

Nu har jeg ikke lige en kørende Solaris indenfor rækkevidde, men prøv at
se om ikke der ligger en brugbar awk et sted udenfor path. /usr/ucb
eller noget deromkring

> Det går cirka lige så dårligt på de rigtig gamle kasser jeg
> bakser med.

Bare sådan af ren nysgerrighed: Hvor gamle er de, og hvad er det for
nogle boxe?

/k

Mogens Kjaer (09-02-2006)
Kommentar
Fra : Mogens Kjaer


Dato : 09-02-06 10:20

Kristian Vilmann wrote:
....
> Nu har jeg ikke lige en kørende Solaris indenfor rækkevidde, men prøv at
> se om ikke der ligger en brugbar awk et sted udenfor path. /usr/ucb
> eller noget deromkring

Solaris (SunOS 5.7):

$ /usr/xpg4/bin/awk 'BEGIN {print strftime("%Y%m%d",systime()-3600*24)}'
/usr/xpg4/bin/awk: line 0 (): variable "" cannot be used as a function
$ /usr/bin/awk 'BEGIN {print strftime("%Y%m%d",systime()-3600*24)}'
awk: syntax error near line 1
awk: illegal statement near line 1

Solaris 10 skriver det samme.

SGI IRIX:

$ awk 'BEGIN {print strftime("%Y%m%d",systime()-3600*24)}'
Calling undefined function strftime
Source line number 1

Mogens

--
Mogens Kjaer, Carlsberg A/S, Computer Department
Gamle Carlsberg Vej 10, DK-2500 Valby, Denmark
Phone: +45 33 27 53 25, Fax: +45 33 27 47 08
Email: mk@crc.dk Homepage: http://www.crc.dk

Thorbjørn Ravn Ander~ (09-02-2006)
Kommentar
Fra : Thorbjørn Ravn Ander~


Dato : 09-02-06 10:22

Morten Guldager <Morten.Guldager@gmail.com> writes:

> Det går cirka lige så dårligt på de rigtig gamle kasser jeg
> bakser med.

Kan din date udskrive klokken nu som sekunder?
--
Thorbjørn Ravn Andersen


Morten Guldager (09-02-2006)
Kommentar
Fra : Morten Guldager


Dato : 09-02-06 16:57

2006-02-09 Thorbjørn Ravn Andersen wrote
> Morten Guldager <Morten.Guldager@gmail.com> writes:
>
>> Det går cirka lige så dårligt på de rigtig gamle kasser jeg
>> bakser med.
>
> Kan din date udskrive klokken nu som sekunder?

Nixen.


/Morten

Thorbjørn Ravn Ander~ (09-02-2006)
Kommentar
Fra : Thorbjørn Ravn Ander~


Dato : 09-02-06 19:53

Morten Guldager <Morten.Guldager@gmail.com> writes:

> > Kan din date udskrive klokken nu som sekunder?
>
> Nixen.

Kan du skrive et C program?

Noget med gettimeofday(2) og sprintf(3).
--
Thorbjørn Ravn Andersen


Morten Guldager (09-02-2006)
Kommentar
Fra : Morten Guldager


Dato : 09-02-06 19:59

2006-02-09 Thorbjørn Ravn Andersen wrote
> Morten Guldager <Morten.Guldager@gmail.com> writes:
>
>> > Kan din date udskrive klokken nu som sekunder?
>>
>> Nixen.
>
> Kan du skrive et C program?
>
> Noget med gettimeofday(2) og sprintf(3).

Ingen compilere installeret.


/Morten

Thorbjørn Ravn Ander~ (09-02-2006)
Kommentar
Fra : Thorbjørn Ravn Ander~


Dato : 09-02-06 21:26

Morten Guldager <Morten.Guldager@gmail.com> writes:

> Ingen compilere installeret.

Er kassen binært kompatibel med noget der HAR en compiler installeret?

Må man se manualsiden til date?
--
Thorbjørn Ravn Andersen


Peter Makholm (09-02-2006)
Kommentar
Fra : Peter Makholm


Dato : 09-02-06 10:25

Morten Guldager <Morten.Guldager@gmail.com> writes:

> Jeg skrev følgende awk program:
>
> awk 'BEGIN {print strftime("%Y%m%d", systime()-3600*24)}'
>
> Og på min linux virker det helt perfekt.

Det gør det ikke på min hvor awk er mawk. Mon ikke din awk er gawk på
linux?

brother@pma-linux$ awk 'BEGIN {print strftime("%Y%m%d",systime()-3600*24)}'
awk: line 2: function strftime never defined
awk: line 2: function systime never defined
brother@pma-linux$

--
Peter Makholm | I congratulate you. Happy goldfish bowl to you, to
peter@makholm.net | me, to everyone, and may each of you fry in hell
http://hacking.dk | forever
| -- The Dead Past

Morten Guldager (09-02-2006)
Kommentar
Fra : Morten Guldager


Dato : 09-02-06 16:57

2006-02-09 Peter Makholm wrote
> Morten Guldager <Morten.Guldager@gmail.com> writes:
>
>> Jeg skrev følgende awk program:
>>
>> awk 'BEGIN {print strftime("%Y%m%d", systime()-3600*24)}'
>>
>> Og på min linux virker det helt perfekt.
>
> Det gør det ikke på min hvor awk er mawk. Mon ikke din awk er gawk på
> linux?

Helt bestemt. Sådan en default SuSE installation.


/Morten

Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408938
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste