Как использовать переменную вместо файла для вывода этой команды wc

Я хочу прочитать файл с заданным смещением до конца этого файла.

Мне нужно получить количество байтов, которые были прочитаны во время процесса, а также перенаправить вывод файла в другом месте.

  • Как узнать, длится ли один час через несколько сценариев оболочки?
  • Печать массива в файл с каждым элементом массива в новой строке в bash
  • выполнение команд последовательно в bash
  • Внедрение отката в bash
  • Преобразование всех первых символов в идентификатор электронной почты в верхний регистр в BASH
  • bash: безопасно ли оценивать $ BASH_COMMAND?
  • Вот мой сценарий:

    ...some stuff here... dd if=$file bs=1 skip=$skippedBytes | tee >(wc --bytes > $file.count) >(cat - >> $file.output) | $($exportCommandString $file) byteCount=$(cat $file.count) rm $file.count echo "Number of read bytes: $byteCount" 

    Я хотел бы, чтобы часть wc -bytes помещала возвращаемое значение внутри переменной, поэтому я могу использовать ее после, не используя файл ($ file.count).

    Что-то вроде:

     dd if=$file bs=1 skip=$skippedBytes | tee >(byteCount=$(wc --bytes)) >(cat - >> $file.output) | $($exportCommandString $file) echo "Number of read bytes: $byteCount" 

    Кроме того, мой скрипт зависает и не работает.

    Можно ли это сделать и как?

  • Генерация случайных символов - со случайным выходом!
  • Перенаправить stdout и stderr, с метками времени только на stderr
  • присвоение переменной environement, за которой следует команда
  • Найти размер файла в unix, используя для цикла
  • bash + Есть ли что-то вроде log4j для скрипта bash?
  • Bash: переименовать файл с префиксом в качестве суффикса
  • 2 Solutions collect form web for “Как использовать переменную вместо файла для вывода этой команды wc”

    Вы можете использовать небольшой взлом с перенаправлением:

     byteCount=$( exec 3>&1 ; dd if=$file bs=1 skip=$skippedBytes | tee -a >(wc -c >&3) $file.output |\ $($exportCommandString $file) > /dev/null ; 3>&1 ) 

    Он перенаправляет все выходные данные на 3, которые вы создали с помощью exec, а затем возвращает их обратно в конец.

    Вам также необходимо перенаправить весь вывод из $ exportCommandString в / dev / null, иначе он будет смешан с выходом wc.

    Все stderr будут работать как обычно, никаких изменений не будет.

    ps: вы можете использовать tee -a file вместо tee >(cat - >> file)) .

    pps: вы не можете экспортировать переменные из подоболочки, которые всегда создаются при использовании pipe | в bash или $() . Поэтому нет способа сделать что-то вроде

     tee -a >(VAR=$(wc -c)) $file.output 

    Может быть, что-то вроде этого:

     byteCount=$(tail -c +$skippedBytes $file | tee $file.output | wc -c) 
    Linux и Unix - лучшая ОС в мире.