6

So if I enter the command

$ gzip --version | head -n1

everything goes as expected. But if I try the same with bzip2:

$ bzip2 --version | head -n1

I get a lot of lines and I have to press Ctrl-C to terminate.

What is happening here?

EDIT:

The lines being printed by

$ bzip2 --version | head -n1

bzip2, a block-sorting file compressor.  Version 1.0.6, 6-Sept-2010.

Copyright (C) 1996-2010 by Julian Seward.

This program is free software; you can redistribute it and/or modify
it under the terms set out in the LICENSE file, which is included
in the bzip2-1.0.6 source distribution.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
LICENSE file for more details.

and i have to press Ctrl-C to continue.

If I omit the pipe I get

$ bzip2 --version 

bzip2, a block-sorting file compressor.  Version 1.0.6, 6-Sept-2010.

Copyright (C) 1996-2010 by Julian Seward.

This program is free software; you can redistribute it and/or modify
it under the terms set out in the LICENSE file, which is included
in the bzip2-1.0.6 source distribution.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
LICENSE file for more details.

bzip2: I won't write compressed data to a terminal.
bzip2: For help, type: `bzip2 --help'.

If I merge stdout with stderr as @devnull sais, it displays the lines well, but i need to press Ctrl-C. I tried

$ gcc 2>&1 | head -n1

and it works well, so I think there is something still missing in the bzip2 command.

EDIT 2:

I solved the issue with the following command:

$ bzip2 --version 2>&1 < /dev/null | head -n1 

But I still don't understand the problem.

9
  • Could you show some of the lines being printed? Does \bzip2 --version 2>&1 | head -n1 work better?
    – terdon
    Jan 31, 2014 at 15:07
  • The version # appears and the license block. If the pipe is removed, I see also: "bzip2: I won't write compressed data to a terminal."
    – user44370
    Jan 31, 2014 at 16:41
  • @terdon It works better, but i still have to press Ctrl-C, and I don't know why.
    – Msegade
    Jan 31, 2014 at 19:56
  • Please post the output of type bzip2 and type head.
    – terdon
    Jan 31, 2014 at 20:00
  • @terdon type bzip2 gives bzip2 is /usr/bin/bzip2. type head gives head is /usr/bin/head.
    – Msegade
    Jan 31, 2014 at 20:03

1 Answer 1

7

The difference is that gzip --version outputs to STDOUT while bzip2 --version outputs to STDERR.

Merge STDERR into STDOUT and you'd see the expected:

$ bzip2 --version 2>&1 | head -n1
bzip2, a block-sorting file compressor.  Version 1.0.6, 6-Sept-2010.
2
  • That's better, but still doesn't work as expected, I have to press Ctrl-C as before.
    – Msegade
    Jan 31, 2014 at 13:50
  • @Msegade That's odd. I just tried it and don't need to interrupt to get the prompt.
    – devnull
    Jan 31, 2014 at 13:51

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .