Quantcast
Channel: Linux Ludus
Viewing all articles
Browse latest Browse all 34

ESEGUIRE UN COMANDO E SCRIVERE L’OUTPUT IN UN FILE DI LOG EVITANDO DI GENERARE UN FILE VUOTO IN ASSENZA DI OUTPUT

$
0
0

Ho testato 4 modi diversi.
I primi 2 fanno leva sul ifne (comando che fa parte delle moretuils).
Il problema di fondo è che, pur usando ifne, bash creava file.log, poiché bash “predispone” tutti i comandi e relativi file, indipendentemente che poi la pipe abbia successo.
Il terzo caso sfrutta una variabile dove inserire l’output.
Se la variabile è “piena”, esegue il comando che scrive il file.
La quarta e ultima soluzione crea un file temporaneo e lo sposta se contiene qualcosa (non è vuoto).

 

# Errato
command | ifne cat > file.log

# Soluzione 1
command | ifne bash -c "cat > file.log"

# Soluzione 2
command | ifne tee file.log > /dev/null

# Soluzione 3
output="$(command)"
[ -n "$output" ] && echo "$output" > file.log

# Soluzione 4
tmp_file=$(mktemp)
command > $tmp_file
[ -s $tmp_file ] && mv $tmp_file file.log

 

L'articolo ESEGUIRE UN COMANDO E SCRIVERE L’OUTPUT IN UN FILE DI LOG EVITANDO DI GENERARE UN FILE VUOTO IN ASSENZA DI OUTPUT sembra essere il primo su Linux Ludus.


Viewing all articles
Browse latest Browse all 34