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 に答える