Как получить последнюю строку вывода или код выхода

У меня давно была такая проблема. Проверьте свою память (RAM), используя тест памяти, поставляемый с fedora и ubuntu DVD.

3
01.04.2019, 22:49
2 ответа
grade=$( {./a.out 2>/dev/null || echo 0; } | tail -n 1 )

Это попытается выполнить ./a.out, а затем добавить строку с одним 0в свой вывод, если эта программа завершилась с не -нулевым статусом выхода или вообще не смогла выполниться. 0будет пойман tail -n 1и помещен в $grade.

Если ./a.outвыполняется правильно и завершается с нулевым статусом выхода, echoне срабатывает.

Удалите перенаправление стандартной ошибки на /dev/null, если вы заинтересованы в просмотре диагностических сообщений, связанных с запуском ./a.out.

Измените 0на "$?", чтобы вместо этого получить код выхода. Чтобы иметь возможность отличить число от ошибки, вы можете вместо этого использовать NaNили какую-либо строку ошибки.

2
27.01.2020, 21:17

Ваша проблема сводится к :"Я хочу получить последнюю строку вывода И обнаружить аварийный выход без использования временных файлов". В таком случае set -o pipefail— ваш друг.

Вот простой скрипт, который выполняет свои аргументы и записывает последнюю строку вывода при обычном выходе:

#!/bin/bash

[[ -x $1 ]] || {
    echo >&2 "Usage ${0##*/} <PROGRAM> [ARG1]..."
    exit 1
}

set -o pipefail
program=$1
shift;
x=$($program "$@" | tail -1)

if [[ $? -eq 0 ]]; then
    echo "Pass: $x"
else
    echo "Fail: $?"
fi

Я оставлю вам проблему выставления оценок.

2
27.01.2020, 21:17

Теги

Похожие вопросы