0

我正在尝试以这种方式使用 bash 解压缩 bzip 文件

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

但这失败了

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

但如果我这样做

bzcat all.tbz | tar x

那行得通

我之前的方法有什么问题。

谢谢!

4

1 回答 1

2

你有很多语法错误。

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 存储在变量中

于 2016-12-15T23:37:45.410 回答