Pergunta

tar -xvzf $ filename.tar.gz || {Exit $ ?; }

Aqui meus scripts iria sair com errorCode 141. Estou usando o Fedora Core 6 com versão tar 1,15

isso não vai acontecer o tempo todo, mas mais de 70 por cento do tempo ele falhar.

Foi útil?

Solução 3

Como alternativa agora estamos usando cpio para arquivar, que funciona bem para nós agora, embora eu gostaria de saber por que tar está causando esse problema, a sua volta por muito tempo, e sendo usado como ferramenta padrão para anos.

Outras dicas

Eu percebo esta discussão é mais do que alguns anos, mas eu estou comentando para aquelas pessoas que tropeçar em cima esta discussão com o erro.

Sempre que você usar uma opção de compactação, alcatrão abre implicitamente uma conexão com o programa subjacente usando um cachimbo. Assim, no OP exemplo: tar -xvzf $filename.tar.gz, o tar vai realmente fazer é executar algo semelhante a isto: gunzip $filename.tar.gz | tar -xv -. Você pode verificar isso, executando uma top, onde você vai ver dois processos (um para alcatrão e um para gzip).

Às vezes, porém, a própria tubulação rompe. Por exemplo, se o arquivo não é um arquivo gzip. Tome este por exemplo: tar -xvzf somefile.iso, o que seria equivalente a gunzip somefile.iso | tar -xv -. Em tal situação um, gzip vai erro fora. Quando os erros gzip para fora, o gasoduto vai quebrar. Outra possibilidade seria se o arquivo gzip foi correta, mas o interior arquivo tar de que estava corrompida. Neste caso, gzip começa a enviar o fluxo de descompactado ao alcatrão, mas depois tar percebe que algo está errado e fecha o fluxo. gzip aqui, então, erro fora, porque de saída está fechada.

Em valores de saída, um valor acima de 128 indica terminação devido a um sinal, e a quantidade acima de 128 significa que o sinal causado terminação. Assim, se subtrair 128 do código de saída do OP de 141, temos 13, o que corresponde a SIGPIPE (man 7 signal para uma lista de sinais padrão e seus valores inteiros correspondentes).

comentário A página lista homem de SIGPIPE como "Broken pipe: gravação a tubulação sem leitores". Portanto, parece que gzip está tentando escrever para o tubo, mas tar parou de escutar. Meu palpite é que gzip é descompactar o arquivo com sucesso, mas o fluxo não comprimido não é um arquivo tar válido. Meu conselho aqui seria para executar gunzip no arquivo, alcatrão, em seguida, executado no arquivo de resultado e ver qual delas falhar (com base na SIGPIPE, o meu palpite é que o tar irá falhar). Em ambos os casos, parece que o arquivo não pode ser lido por essas versões das ferramentas (qualquer corrupção ou um conflito de versões de algum tipo).

Como foram esses arquivos feito (quais as opções para o alcatrão, etc)? eles são criados no computador ou outra máquina? Se você criar um arquivo .tar.gz nesta máquina, pode este mesmo extrato máquina esses arquivos sem o erro?

GNU tar retorna apenas algumas coisas, nenhuma delas sendo -141. no entanto, se ele está correndo um subprocesso, como gzip, e esse processo terminar de forma anormal, ele retorna que código de retorno.

Eu não tenho certeza o que o subprocesso poderia ter sido embora. experimentá-lo com --verbose e veja se você obter alguma pista.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top