LINUX.ORG.RU

Не работает пренаправление через cat

 ,


0

1

Я не программист, так что долго не смейтесь. Написал коротенький скрипт, для проверки на бэд-блоки. не работает та часть, где из лога работы программы badblocks, нужно скопировать результат в конечный лог:

#! /bin/bash
# ========================================================
test -d /LOGS/sdb1 || { mkdir -p /LOGS/sdb1 && LOGPATH="/LOGS/sdb1" || LOGPATH='/tmp'; } && LOGPATH="/LOGS/sdb1" # настройка директории логировани
DATE=`date +%x_%Hh-%Mm-%Ss`
exec > >(tee "$LOGPATH/sdb1"_current.txt) # запуск с этого места логирования работы скрипта в файл
# =============================================================
echo ===============================================================
echo
echo "Старт проверки на bad-блоки раздела sdb1 - $DATE"
echo
badblocks -svo /media/8804afd8-a1df-409d-927b-da6cfcaf5a14/badblocks_sdb1.list /dev/sdb1
echo
echo ----------------------------------------------------------------
echo "Содержимое лог-файла badblocks_sdb1.list:"
echo
if [[ -e /media/8804afd8-a1df-409d-927b-da6cfcaf5a14/badblocks_sdb1.list ]]
    then
        if [[ ! -s /media/8804afd8-a1df-409d-927b-da6cfcaf5a14/badblocks_sdb1.list ]]
            then
                echo "Проверка завершена без ошибок"
            else
                cat /media/8804afd8-a1df-409d-927b-da6cfcaf5a14/badblocks_sdb1.list >> "$LOGPATH/sdb1"_current.txt
        fi
    else
        echo " Файл /media/8804afd8-a1df-409d-927b-da6cfcaf5a14/badblocks_sdb1.list не найден"
fi
echo ----------------------------------------------------------------
echo
echo "Завершена проверка на bad-блоки раздела sdb1 - $DATE"
echo ===============================================================

Т.е. при перенаправлении «>>» не происходит ничего, пустая строка (лог-файл, разумеется, не пустой). Если поставить одинарный символ перенаправления «>», то работает логичнее, удаляет все, что перед CAT, добавляет данные о сбойных секторах, и корректно дописывает файл.

Смысл, чего хочу добиться, что бы между строками

echo ----------------------------------------------------------------
echo "Содержимое лог-файла badblocks_sdb1.list:"
и
echo ----------------------------------------------------------------
в конечном логе «$LOGPATH/sdb1»_current.txt было содержимое файла /media/8804afd8-a1df-409d-927b-da6cfcaf5a14/badblocks_sdb1.list Возможно коряво объяснил, но если сможете помочь, буду очень признателен!

между строками ... в конечном логе ... было содержимое файла

Стоп, что? У тебя же в конечном логе этих строк нет.

Если ты запускаешь написанный тобой скрипт и перенаправляешь его вывод в лог-файл, тогда просто убери перенаправление в файл в самом скрипте.

Deleted
()

Тебе не нужно перенаправлять cat

anonymous
()
Ответ на: комментарий от mos

Общайтесь на русском языке. Тексты на иностранных языках (кроме английского) снабжайте комментарием так, чтобы в дискуссии смогли принять участие участники, не знакомые с этими языками.

darkenshvein ★★★★★
()
Ответ на: комментарий от darkenshvein

с тобой хауту общается? О.о

завязывай, бро.

mos ★★☆☆☆
()

Зачем обязательно cat'ить? Простого cp /media/8804afd8-a1df-409d-927b-da6cfcaf5a14/badblocks_sdb1.list "${LOGPATH}/sdb1_current.txt" достаточно.

В целом по коду: у тебя несколько раз повторяется /media/8804afd8-a1df-409d-927b-da6cfcaf5a14/badblocks_sdb1.list. Завел бы переменную, например, BBLIST=/media/8804afd8-a1df-409d-927b-da6cfcaf5a14/badblocks_sdb1.list сразу после DATE=… и использовал бы далее везде.

dexpl ★★★★★
()
Ответ на: комментарий от Deleted

Ну не совсем так, там эти строки есть, имеются ввиду последние

echo ----------------------------------------------------------------
echo
echo "Завершена проверка на bad-блоки раздела sdb1 - $DATE"
echo ===============================================================
и они дописываются. А по поводу двойного перенаправления, я понимаю, но сама программа badblocks, точнее вывод ее работы, появляются только в выводе ее лог-файла т.е. badblocks_sdb1.list, но не в «$LOGPATH/sdb1»_current.txt...

Pashtet
() автор топика
Ответ на: комментарий от dexpl

Спасибо

К сожалению с cp или cat, результат тот же. А переменную дбавлю, допилю неработающее, и добавлю.

Pashtet
() автор топика
Ответ на: комментарий от Pashtet

Ну не совсем так, там эти строки есть

Каким образом ты этого добиваешься? По скрипту можно сказать точно, что они просто печатаются в stdout, но никак не в какой бы то ни было лог-файл

Deleted
()
Ответ на: комментарий от Deleted

Вот, получающиеся конечные файлы при > и >> соответственно:

Содержимое лог-файла badblocks_sdb1.list:

------------------------------------------------------------------

Завершена проверка на bad-блоки раздела sdb1 - 01.09.2016_11h-33m-27s

Результат записан в файл /LOGS/sdb1/sdb1 - дата

==================================================================
==================================================================

Старт проверки на bad-блоки раздела sdb1 - 01.09.2016_11h-35m-07s


------------------------------------------------------------------
Содержимое лог-файла badblocks_sdb1.list:

------------------------------------------------------------------

Завершена проверка на bad-блоки раздела sdb1 - 01.09.2016_11h-35m-07s

Результат записан в файл /LOGS/sdb1/sdb1 - дата

==================================================================
Pashtet
() автор топика

Сорри, первый такой с cp, вместо cat. С cat такой:

195597704 195597705 195597706 195597707 195598480 807570408 807570409 807570410 807570411

807570932
807570933
807570934
807570935
807571452
807571453
807571454
807571455
Завершена проверка на bad-блоки раздела sdb1 - 01.09.2016_11h-39m-28s

Результат записан в файл /LOGS/sdb1/sdb1 - дата

==================================================================

Pashtet
() автор топика
Ответ на: Спасибо от Pashtet

К сожалению с cp или cat, результат тот же.

Просто я не сразу понял, чего ты хочешь достичь. Можно вообще убрать "o /media/8804afd8-a1df-409d-927b-da6cfcaf5a14/badblocks_sdb1.list" из параметров badblocks — пусть выводит отчет в STDOUT, который у тебя уже exec'ом перенаправлен в твой лог. Если нужно получить и твой лог, и вывод badblocks в разных файлах, то ecko правильно сказал насчет tee:

badblocks -sv /dev/sdb1 | tee /media/8804afd8-a1df-409d-927b-da6cfcaf5a14/badblocks_sdb1.list

dexpl ★★★★★
()
Ответ на: комментарий от dexpl

Ого!

Поробую! Огромное спасибо! Сейчас убегаю работать, вечером проверю!

Pashtet
() автор топика
Ответ на: комментарий от dexpl

Спасибо!

Так получатся. Огромная благодарность.

Pashtet
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.