Скрипт Bash — как перенаправить вывод из скрипта Bash в файл?

Скрипт Bash — как перенаправить вывод из скрипта Bash в файл?

Итак, у меня есть базовый файл, который показывает использование памяти, переключатели, потоки и т. д., и я хочу, чтобы эти результаты были выведены в файл журнала, текстовый файл. В данный момент я запускаю свою команду, набрав "./file.sh 1 1", тогда как первый аргумент определяет, сколько циклов она будет выполнять, а второй аргумент определяет, как долго она будет спать. По сути, это цикл while, запускающий все эти команды.

Я хочу экспортировать результаты в файл журнала для отслеживания. В конечном итоге моя цель — сделать так, чтобы это работало в течение 24 часов и регистрировало все результаты.

Я в основном хочу, чтобы все это летало в файл журнала, если я добавлю > log.txt или >> log.txt, то это будет напечатано в файл журнала, как я и хочу. Но в терминале это не отображается.

    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 ""

решение1

Если вы хотите и регистрировать в файле, и выводить на stdout, вы можете попробовать 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 ""

Если вы хотите, чтобы все отправлялось в ваш файл журнала, мы могли бы использовать:

(
    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

Связанный контент