Разархивировать bzip файл используя bash

Я пытаюсь распаковать bzip файл, используя bash таким образом

tmp1 = #(bzcat all.tbz)
echo tmp1 | tar x

Но это не с

tar: Unrecognized archive format
tar: Error exit delayed from previous errors.

Но если я сделаю это

bzcat all.tbz | tar x

и это работает

В чем проблема с моим прежним способом.

Спасибо!

1 ответ

Решение

У вас есть множество синтаксических ошибок.

tmp1=$(bzcat all.tbz)
echo "$tmp1" | tar x
  1. Назначения не могут быть пробелы вокруг =,
  2. использование $(...) выполнить команду и подставить ее вывод.
  3. Положил $ перед именем переменной при ее отображении.
  4. Положил " вокруг переменной, чтобы предотвратить расщепление слова и расширение подстановочного знака результата.

Но это, скорее всего, все равно не будет работать, потому что файлы tar содержат нулевые байты, а переменные bash не могут содержать этот символ (это терминатор строки C).

Если вы просто хотите перехватить сообщение об ошибке в случае сбоя, вы можете сделать:

tmp1=$((bzcat all.tbz | tar x) 2>&1)
if [ ! -z "$tmp1" ]
then echo "$tmp1"
fi

Смотрите скрипт Bash - храните stderr в переменной

Другие вопросы по тегам