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.
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:
echo "$STORAGE"
echo "{STORAGE[@]}"
Infelizmente, todos produzem o mesmo resultado.
Quebra de saída como esta em um pré bloco em HTML.
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.
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/ / /g' | sed 's/^/<br>/'
:
STORAGE=$(df -PTh | column -t | sort -n -k6n)| sed 's/ / /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.
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>
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.