Emita o resultado do comando DF para a variável e imprima em uma página HTML [closed]

1

Estou tendo um problema ao executar um script que basicamente captura o espaço em disco do servidor e gera o resultado em uma página HTML.

STORAGE=$(df -PTh | column -t | sort -n -k6n)

A saída no STDOUT está OK, está bem formatada. Quando faço eco da variável para uma página HTML, a saída se torna uma linha, assim como esta:

/dev/vx/dsk/localdg/wm7x01 vxfs 30G 21G 9.3G 70% /apps/wm7x01 /dev/mapper/vg00-vrts ext3 6.9G 4.7G 2.3G 68% /vrts_install /dev/mapper/vg00-ora11g_cli ext3 7.7G 4.1G 3.3G 57% /usr/oracle11g_cli /dev/mapper/vg00-repackage ext3 1008M 423M 586M 42% /var/spool/repackage /dev/vx/dsk/cfs_dcgnts_dg/shared vxfs 220G 91G 130G 42% /apps/shared

Eu até tentei usar:

  • citações: echo "$STORAGE"
  • uma matriz: echo "{STORAGE[@]}"

Infelizmente, todos produzem o mesmo resultado.

    
por Ravenwolf 14.11.2013 / 04:50

4 respostas

1

Quebra de saída como esta em um pré bloco em HTML.

Exemplo

STORAGE=$(df -PTh | column -t | sort -n -k6n)
echo "<pre>$STORAGE</pre>"

O HTML não se preocupa em preservar o espaço em branco.

    
por 14.11.2013 / 05:08
1

Na saída da cadeia de comando está o espaço em branco na forma de espaços e novas linhas (e você tem sorte de não haver guias). Você deve fazer o pipe da saída em | sed 's/ /&nbsp;/g' | sed 's/^/<br>/' :

STORAGE=$(df -PTh | column -t | sort -n -k6n)| sed 's/ /&nbsp;/g' | sed 's/^/<br>/'

para preservar o espaço em branco. Você pode usar isso sem obter o efeito de alteração de fonte que o <pre> induz.

    
por 14.11.2013 / 05:18
1

Como você faz eco? Como em

$ printf "<pre>%s</pre>\n" "$storage" >> file.html 

deve funcionar.

Não deve haver necessidade de incluir column . Este é um candidato para uma tabela HTML e pode ser gerado por algo como:

df -PTh | \
sed '1d' | \
sort -n -k6 | \
awk '
{
    printf "\n\t<tr>";
    for (n = 1; n < 7; ++n)
            printf("\n\t<td>%s</td>",$n);
    printf "\n\t<td>";
    for(;n <= NF; ++n)
            printf("%s ",$n);
    printf "</td>\n\t</tr>"
}
'

Envolva-o em algo como:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Disk space usage</title>
<style>
table, td, th {
    border : 1px solid green;
}
th {
    background-color: green;
    color           : white;
}
</style>
</head><body>
<table>
    <tr>
    <th>Filesystem</th>
    <th>Type</th>
    <th>Size</th>
    <th>Used</th>
    <th>Avail</th>
    <th>Use%</th>
    <th>Mounted on</th>
    </tr>

<!-- df output awk table -->

</table>
</body>
</html>
    
por 14.11.2013 / 05:08
0

A substituição do comando é o que está massacrando o seu espaço em branco. Na página bash(1) man:

Bash performs the expansion by executing command and replacing the command substitution with the standard output of the command, with any trailing newlines deleted. Embedded newlines are not deleted, but they may be removed during word splitting.

Agora, do meu entendimento, isso significa que usar

STORAGE="$(df ...)"

deve ser suficiente para preservar todos os espaços em branco (mas que estão em segundo plano). No entanto, eu tentei as duas versões e o espaço em branco está totalmente confuso. Em vez disso, por que não usar apenas o redirecionamento de saída:

df -PTh | column -t | sort -n -k6n >> /your/html/file

junto com os filtros sugeridos pelas outras respostas para preservar o espaço em branco na página HTML renderizada.

    
por 14.11.2013 / 15:17

Tags