Script Bash - Como redireciono a saída de um script bash para um arquivo?

Script Bash - Como redireciono a saída de um script bash para um arquivo?

Então eu tenho um arquivo básico que mostra o uso de memória, switches, threads etc. e quero que esses resultados sejam impressos em um arquivo de log, um arquivo de texto. No momento eu inicio meu comando digitando "./file.sh 1 1" enquanto o primeiro argumento determina quantos loops ele executará o comando, e o segundo argumento determina quanto tempo ele irá dormir. É basicamente um loop while executando todos esses comandos.

Quero exportar os resultados para um arquivo de log para acompanhar. No final, meu objetivo é executar isso por um período de 24 horas e registrar todos os resultados.

Basicamente, quero que tudo isso voe para um arquivo de log; se eu adicionar > log.txt ou >> log.txt, ele será impresso no arquivo de log como eu quero. Mas isso não aparece no terminal.

    echo "Threads:"
        grep -s '^Threads' /proc/[0-9]*/status | awk '{ sum += $2; } END { print sum; }' > log.txt
        echo""
        echo "Free memory:"
        grep MemFree /proc/meminfo > log.txt
        echo ""
        echo "Firefox usage"
        pidstat -C firefox -w -u > log.txt
        echo ""

Responder1

Se você deseja registrar em arquivo e enviar para stdout, você pode tentar tee:

    echo "Threads:"
    grep -s '^Threads' /proc/[0-9]*/status | awk '{ sum += $2; } END { print sum; }' | tee -a log.txt
    echo""
    echo "Free memory:"
    grep MemFree /proc/meminfo | tee -a log.txt
    echo ""
    echo "Firefox usage"
    pidstat -C firefox -w -u | tee -a log.txt
    echo ""

Se você quiser que tudo seja enviado para o seu arquivo de log, poderíamos usar:

(
    echo "Threads:"
    grep -s '^Threads' /proc/[0-9]*/status | awk '{ sum += $2; } END { print sum; }'
    echo""
    echo "Free memory:"
    grep MemFree /proc/meminfo
    echo ""
    echo "Firefox usage"
    pidstat -C firefox -w -u
    echo ""
) | tee -a log.txt

informação relacionada