Да, в Linux есть другие инструменты для работы с разделами, которые могут работать с разделами FAT32. Я знаю, что gdisk
и parted
отлично работают на дисках с разделами GPT, которые имеют раздел ESP.
Я предполагаю, что вы хотели бы использовать этот необычный способ пометить фактический канал и tee
в конце сообщения журнала, потому что вы не хотите, чтобы каждый канал echo
?
Ну, можно и так:
logfile='report.txt'
log () {
if [ -z "$1" ]; then
cat
else
printf '%s\n' "$@"
fi | tee -a "$logfile"
}
log "some message"
log "some other message"
log "multi" "line" "output"
{
cat <<LETTER
Dear Sir,
It has come to my attention, that a whole slew of things may be
collected and sent to the same destination, just by using a single
pipe. Just use {... } | destination
Sincerely, $LOGNAME
LETTER
cat <<THE_PS
PS.
Here's the output of "ls -l":
THE_PS
ls -l
echo "LOL"
} | log
То есть оберните неуклюжую команду tee
в простую функцию оболочки, имя которой легко ввести, и просто передайте ей вывод.
В этом примере функция log
использует printf
для вывода данных, указанных в ее командной строке, или переключается на чтение из стандартного ввода, если это не были аргументы командной строки.
Можно даже использовать
./your_original_script_without_special_logging 2>&1 | log
Они так используют
echo '***************-:START OF THE REPORT:-***********' $log
Строка просто отображает содержимое $log
в командной строке, не действуя так, как если бы вы вводили эту строку в консоли.
Чтобы линия работала так, как вы ожидаете, вы можете использовать или использовать eval
.
eval echo '***************-:START OF THE REPORT:-***********' $log
На самом деле вам следует использовать функцию, маскирующую команду echo
для этого:
echo ()
{
builtin echo "$@" | tee -a report.txt
}
Тогда можно сделать:
echo ""
echo '***************-:START OF THE REPORT:-***********'
Без жесткого кодирования tee
или чего-либо еще в конце команд echo
.