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

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

 

I commenti sono chiusi