Newsgroup: it.comp.os.linux.iniziare
Titolo: Aggiungere righe all'inizio del file.

Ciao a tutti,
normalmente utilizzo "#comando 2>&1 >> file.txt" e tutto quello che esce 
come standard input e output viene ridiretto e scritto in coda nel file.txt.
Come faccio  ad aggiungere righe all'inizio di un file anziché in coda?
E' possibile inserire le righe in un determinato numero di riga 
all'interno del file?
Grazie,
		Dino
 

 all'interno del file?
Usando sed, ma in generale e' poco consigliabile farlo perche' richiede
una ri-elaborazione dell'intero file. Adesso spiega cosa stai cercando
di fare, non la tua soluzione.
Davide
-- 
Best job interview question I've heard: "So, do you have
15 years of experience with Java?" "No, it just seems like 15 years...."
-- Geoff Lane

 
Semplice, ho un backup che viene eseguito 3 volte al dì per sei 
dispositivi e l'output ed ogni dispositivo viene salvato su un file e 
poi inviato via e-mail alla fine di ogni backup, Per non avere tre file 
di backup al dì per sei = 18 file, l'output viene reindirizzato sullo 
stesso file di ciascun dispositivo. Quindi, quando mi arriva la seconda 
e terza mail, devo scorrere il mail fino ad arrivare a vedere quello che 
è successo, mentre se l'output fosse aggiunto all'inizio del file, 
vedrei il secondo e terzo backup subito.
Avevo pensato di rinominare il file prima di iniziare il secondo e terzo 
backup, quindi avviare il backup con l'output su il nuovo file e poi 
alla fine rileggere e rinviare il file precedente su questo ultimo.
Ma preferire sapere se è possibile farlo con una procedura diretta.
Grazie,
		Dino

 Ma preferire sapere se è possibile farlo con una procedura diretta.
supponendo che il programma che emette l'output sia "backup", prova con
(backup 2>&1; cat file) >> newfile
mv newfile file


Facile...
backup >logFile
cat logFile logFileGlobale >logFileTmp
mv -f logFileTmp logFileGlobale
Ciao,
-- 
        Roberto Divia`              Love at first sight is one of the greatest
Dep:PH Bat:53 Mailbox:C02110      labour-saving devices the world has ever seen
Route de Meyrin 385               ---------------------------------------------
Case Postale                                Phone:  
+41-22-767-4994
CH-1211 Geneve 23 CERN                      Fax:    
+41-22-767-9585
Switzerland                                 E-Mail: 
Robert...@cern.ch

Roberto Divia ha scritto:

Così l'avevo pensata anche io. e l'ho anche scritto, ma preferivo sapere 
se è possibile farlo con una procedura diretta.
Ciao

antani ha scritto:

Così l'avevo pensata anche io. e l'ho anche scritta, ma preferivo sapere 
se è possibile farlo con una procedura diretta.
Ciao

 se è possibile farlo con una procedura diretta.
Cosa intendi per "diretta"? scrivere direttamente all'interno dello stesso
file senza redirezione, o qualcos'altro?

 sapere se è possibile farlo con una procedura diretta.
una mv te la becchi per forza, cmq forse così ti piace di piu' che usa
soltanto due file: (non che cambi molto eh)
cat - file <<<`backup` > file2 && mv file2 file



Per la serie "il pericolo e' il mio mestiere" (e sperando che il programma
di backup non legga da stdin), si puo' anche fare
(rm file; (backup 2>&1; cat) > file) < file
e ci si risparmia anche il mv, ma io sinceramente non userei un comando del
genere in nessuna circostanza...

 (rm file; (backup 2>&1; cat) > file) < file
Ti rispondo tra una mezzora, quando avro' capito che diavolo fa sta riga :)

antani ha scritto:

Graie per l'info, adesso appena riesco a liberarmi lo provo.
Senti, una spiegazione del funzionamento è possibile averla?
A naso parrebbe che funzioni come espressione matematica, ma la logica 
applicata alla shell non la conosco.
Grazie ancora,
		Dino

 applicata alla shell non la conosco.
Solo a scopo "didattico" (ma da NON usare in pratica):
1) per prima cosa, lo stdin del blocco (...) piu' esterno viene
redirezionato al file "file". Tutti i programmi eseguiti all'interno di
tale gruppo avranno lo stdin redirezionato.
2) "rm file" in teoria cancella "file", ma in realta' siccome il file e'
ancora aperto (per via della redirezione eseguita al punto 1), il file non
viene effettivamente cancellato dal filesystem fino a quando qualcuno ce
l'ha aperto. Pero' viene cancellata la entry dalla directory, quindi
processi successivi potranno creare un file con quel nome (anche se,
ovviamente, non sara' lo stesso file originale). rm non legge da stdin.
3) viene redirezionato lo stdout del blocco (...) piu' interno verso un file
chiamato "file" (che, come detto, non e' il "file" originale). Quindi viene
eseguito "backup" (che assumiamo non legga da stdin), e quindi "cat" che,
ovviamente, legge da stdin. Siccome nessun processo finora ha letto da
stdin, cat si trova come input il file "file" originale", per via della
redirezione eseguita al punto 1). Quindi il blocco (...) piu' interno
produrra' come output:
stdout+stderr di "backup" (per via del 2>&1)
contenuto del file originale
il tutto redirezionato al nuovo file "file".
4) al termine, tutti i file vengono chiusi (e questo fa si' che il
file "file" originale venga effettivamente eliminato dal file system dal
SO - a meno che non ci siano altri hard link al file).
Ripeto: da NON usare.