[bash] hoe regels tekst bovenaan toevoegen aan een bestand

Pagina: 1
Acties:
  • 394 views sinds 30-01-2008
  • Reageer

  • hobbeldebobbel
  • Registratie: Februari 2001
  • Laatst online: 15-02-2023
eigenlijk zegt de titel al alles.

ik draai een crontab die nu nog alle uitkomsten van het script wegschrijft naar een logbestand. Maar hij overschrijft steeds het oude. Om een echt log bestand te maken wil ik het nu eigenlijk anders gaan doen.

dit is het script wat ik nu heb:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#!/bin/sh
echo "++nieuwe backup++"
date
mount -t smbfs -o username=gast,password=gast //192.168.2.101/Projecten /var/backup_mnt_clients

#kijken of lockfile bestaat
if [ -f /var/backup_scripts/backup.lock ]
    then
        echo "     ERROR: lockfile bestaat nog, er draait nog een backup instantie"
        date
    exit
fi
touch /var/backup_scripts/backup.lock

    # wat moet gebackupped worden?
    #    1) BUROZAKEN
    #    2) Projecten 2006
    #    3) Projecten 2005
    #    4) Projecten 2004
    #    5) Projektdocumenten
    #    6) Dummymap
    
        rsync -e ssh -avurpW --delete --progress /var/backup_mnt_clients/PROJEKT\ DOCUMENTEN /var/backup_destination > /dev/null
        echo "          Projektdocumenten gebackupped";
        
        rsync -e ssh -avurpW --delete    /var/backup_mnt_clients/BUROZAKEN /var/backup_destination > /dev/null
        echo "          Burozaken gebackupped";
        
        rsync -e ssh -avurpW --delete   /var/backup_mnt_clients/Projecten\ 2006 /var/backup_destination > /dev/null
        echo "          Projekdocumenten 2006 gebackupped";
        
        rsync -e ssh -avurpW --delete    /var/backup_mnt_clients/Projecten\ 2005 /var/backup_destination > /dev/null
        echo "          Projekdocumenten 2005 gebackupped";

        rsync -e ssh -avurpW --delete   /var/backup_mnt_clients/Projecten\ 2004 /var/backup_destination > /dev/null
        echo "          Projekdocumenten 2004 gebackupped";

        rsync -e ssh -avurpW --delete    /var/backup_mnt_clients/DUMMYMAP /var/backup_destination > /dev/null
        echo "          Dummymap gebackupped";

rm /var/backup_scripts/backup.lock

echo "     Backup klaar,lockfile gedelete "
date
exit


ik wil eigenlijk alles wat geechooed worden anders gaan behandelen.
aan het einde van het script wil ik een variabele wegschrijven naar het begin van een bestand (1). Die variabele bestaat uit meerdere regels; wat is in bash eigenlijk een new-line teken?(2) en hoe kan ik aan een variabele nog wat toevoegen... zoals in PHP met het .= "punt-is"?
de date's zitten er trouwens in om te kijken hoe lang de backup geduurd heeft.

[ Voor 6% gewijzigd door hobbeldebobbel op 20-06-2006 10:10 ]

hier zou een slimme opmerking kunnen staan
maar die staat er niet


  • Sosabowski
  • Registratie: Juni 2003
  • Laatst online: 04-02 22:20

Sosabowski

nerd

hobbeldebobbel schreef op dinsdag 20 juni 2006 @ 10:09:
wat is in bash eigenlijk een new-line teken?
Gewoon
code:
1
\n
toch?

The whole problem with the world is that fools and fanatics are always so certain of themselves, and wiser people so full of doubts. -- Bertrand Russell


  • Paul
  • Registratie: September 2000
  • Laatst online: 18:11
_waar_ schrijft hij het weg naar het logbestand? Niet in dit script :)

Is je cron-command iets als "backup.sh > backup.log" ? Als je daar >> van maakt wordt het iig al toegevoegd aan het logbestand ipv dat het overschreven wordt.

Om het aan het begin te zetten moet je wat meer werk doen denk ik. Eerst > naar een tempfile, dan cat logfile >> tempfile en vervolgens mv tempfile nieuwbestand ofzo? Al is het standaard dat n logfiles dingen aan het einde worden toegevoegd ipv aan het begin. Eventueel kun je met "tail" alleen de staart bekijken zodat je niet het hele bestand door hoeft te lopen als je de status van de laatste backup wilt weten.

Newlines in een variabele gaat volgens deze pagina niet lukken: "Bash variables can not contain newline characters"

Toevoegen gaat door het ding opniew te declareren en te beginnen met zichzelf.
Bash:
1
2
3
4
5
6
7
#!/bin/sh

A="Hoi"

A=$A" Blabla "

A=$A`date`


Wil je in een echo newlines dan moet je de hele zooi tussen " " (of ' ' ) zetten, het hele stuk inclusief newlines wordt naar stdout gezet.

"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock


  • hobbeldebobbel
  • Registratie: Februari 2001
  • Laatst online: 15-02-2023
hij schrijft inderdaad in de crontab met een > de gegevens weg. dus ik ga denk ik maar gewoon >> gebruiken :) het is anders te veel moeite voor te weinig "gain".

alleen ik zit nog even met dat newline gebeuren... als ik het nu namelijk wegschrijf naar een tekstbestand word alles achterelkaar gezet met een blokje tussen de regels zeg maar, alsof hij het newline ding niet kent.
dat \n werkt inderdaad niet, is denk ik meer iets van HTML en javascript waar ik het wel van ken. Dit maakt hij er van:
code:
1
2
3
4
5
6
7
8
9
10
++nieuwe backup++
Tue Jun 20 10:18:00 CEST 2006
          Projektdocumenten gebackupped
          Burozaken gebackupped
          Projekdocumenten 2006 gebackupped
          Projekdocumenten 2005 gebackupped
          Projekdocumenten 2004 gebackupped
          Dummymap gebackupped
     Backup klaar,lockfile gedelete 
Tue Jun 20 10:18:29 CEST 2006

dat is raar in deze textarea doet hij het wel goed maar in kladblok krijg je dit:
Afbeeldingslocatie: http://www.h2m-architecten.nl/gfx/tijdelijk/log.jpg
hoe kan dat? op de een of andere manier doet hij ook raar bij de bestandsnaam

hier zou een slimme opmerking kunnen staan
maar die staat er niet


  • TrailBlazer
  • Registratie: Oktober 2000
  • Laatst online: 22-01 08:08

TrailBlazer

Karnemelk FTW

je moet ff unix2dos over je file heen halen als je hem opent in windows. De charctersets verschillen hier en daar :(

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Dat heeft met EOL-handling te maken ... in Windows is het einde van een regel 0x0d + 0x0a, in Unix is het 0x0a ... zie dos2unix en unix2dos enzovoort.

Edit, dat heeft niet met charactersets te maken, maar met het aangeven van een nieuwe regel!

En een newline in een variabele?
code:
1
2
A='regel 1
regel2'
Zorgt toch voor een newline :?

[ Voor 19% gewijzigd door kenneth op 20-06-2006 10:50 ]

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • TrailBlazer
  • Registratie: Oktober 2000
  • Laatst online: 22-01 08:08

TrailBlazer

Karnemelk FTW

kenneth schreef op dinsdag 20 juni 2006 @ 10:49:

Edit, dat heeft niet met charactersets te maken, maar met het aangeven van een nieuwe regel!
het probleem is in ieder geval opgelost hiermee. Ik wist dat er een verschil was maar dachtd at het anders zat

  • xzenor
  • Registratie: Maart 2001
  • Laatst online: 14-10-2022

xzenor

Ja doe maar. 1 klontje suiker.

in plaats van 'm in notepad te openen kan je wordpad gebruiken... die geeft'm dan wat beter weer..

[ Voor 13% gewijzigd door xzenor op 20-06-2006 11:01 ]


  • Paul
  • Registratie: September 2000
  • Laatst online: 18:11
kenneth schreef op dinsdag 20 juni 2006 @ 10:49:
Dat heeft met EOL-handling te maken ... in Windows is het einde van een regel 0x0d + 0x0a, in Unix is het 0x0a ... zie dos2unix en unix2dos enzovoort.
Carriage-return / linefeed :) Openen in wordpad werkt wel goed, die gaat er goed mee om.

Unix2dos is een erg simpel scriptje trouwens :P
Bash:
1
2
#!/usr/bin/perl -pi
s/\n/\r\n/;

Voor dos2unix moet je de \n en \r\n omdraaien :P
En een newline in een variabele?
code:
1
2
A='regel 1
regel2'
Zorgt toch voor een newline :?
Helaas niet, heb het net ook even tetest.

"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock


  • hobbeldebobbel
  • Registratie: Februari 2001
  • Laatst online: 15-02-2023
help wat nou dan weer??
als ik nu in de shell het volgende intyp:
code:
1
2
[root@localhost backup_scripts]# ./backup.sh
: bad interpreter: No such file or directory

waarom nou weer een bad interpreter... terwijl het script niet veranderd is!
he?

hier zou een slimme opmerking kunnen staan
maar die staat er niet


  • blaataaps
  • Registratie: Juli 2001
  • Niet online
Het script is /wel/ veranderd, je hebt er namelijk een windows-bestand van gemaakt zo te zien, met een van bovenstaande scripts.

  • Suaver
  • Registratie: Januari 2004
  • Laatst online: 19-11-2025

Suaver

jokecoat

Het is toch een shell script?

Verander #!/bin/bash naar #!/bin/sh

You, me, us, together, me, us, you, we, us, you, me... DONE.


  • Paul
  • Registratie: September 2000
  • Laatst online: 18:11
Je moet niet je script door unix2dos halen, maar je logfile als je hem perse met kladblok wilt openen ;)

Als je het script nu door dos2unix haalt werkt het (als je het inderdaad al een keer door unix2dos hebt gegooid) weer als het goed is :)

"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock


  • hobbeldebobbel
  • Registratie: Februari 2001
  • Laatst online: 15-02-2023
haha dom dom... wie heeftooit bedacht dat ze op twee manieren een newline kunnen aangeven......
grrr
ga vanavond maar weer eens verder met scripten...
thnx

hier zou een slimme opmerking kunnen staan
maar die staat er niet


  • Luqq
  • Registratie: Juni 2005
  • Laatst online: 10:44
Suaver schreef op dinsdag 20 juni 2006 @ 11:47:
Het is toch een shell script?

Verander #!/bin/bash naar #!/bin/sh
Euh, bij mij is /bin/sh een symlink naar /bin/bash, daar schiet je dus ook niet echt veel mee op of wel?
;)


Wat je zou kunnen proberen is het bestand om te draaien mbv "tac", dan aan het einde zetten en dan weer omdraaien?

[ Voor 17% gewijzigd door Luqq op 20-06-2006 13:12 ]


  • Paul
  • Registratie: September 2000
  • Laatst online: 18:11
Bij mij op Debian Sarge is het ook een symlink.

Er is overigens wel degelijk verschil tussen die 2. Bash kijkt bij het starten _hoe_ het gestart is, en reageert overeenkomstig.
Hoewel het dus beiden naar dezelfde executable linkt doen ze beiden wat anders.

[ Voor 5% gewijzigd door Paul op 20-06-2006 13:13 ]

"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock


  • daft_dutch
  • Registratie: December 2003
  • Laatst online: 02-12-2025

daft_dutch

>.< >.< >.< >.<

edit: suaver is al genoeg gebashed :p

daarbij hoeft een shell script niet eens bash te zijn.
#!/usr/bin/perl of #!/usr/bin/php is ook goed mogelijk

[ Voor 80% gewijzigd door daft_dutch op 20-06-2006 16:45 ]

>.< >.< >.< >.<

Pagina: 1