apt-get -q flag fails to squelch status -qq hides everything

Bug #874409 reported by AaronSherman
10
This bug affects 2 people
Affects Status Importance Assigned to Milestone
apt (Ubuntu)
Won't Fix
Undecided
Unassigned

Bug Description

According to the docs, apt-get install -q foo should install the package foo, while suppressing progress messages. It does not. Quiet level 2 (-qq or -q=2) will suppress those messages, but also suppresses errors/summary. There is no middle ground.

Example:

$ sudo apt-get install -q=1 mysql-server
Reading package lists...
Building dependency tree...
Reading state information...
mysql-server is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
$ sudo apt-get install -q=2 mysql-server
$

The second example is probably correct output, but the first should suppress "Reading package lists..." type output as they are, as defined in the man page, "progress indicators". Certainly -q should output "mysql-server is already the newest version" which amounts to an error message. It's arguable if the summary "0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded" should be included or not. Either way, the docs are pretty clear that the progress messages don't belong there at all.

Another approach would be to add a -q=3 which does what -q=2 does now, and make -q=2 suppress the progress indicators, but then what exactly is -q=1 doing? There must be some output that it does suppress, but I'm not able to tell what it is.

ProblemType: Bug
DistroRelease: Ubuntu 11.04
Package: apt 0.8.13.2ubuntu4.2
ProcVersionSignature: Ubuntu 2.6.38-11.50-generic 2.6.38.8
Uname: Linux 2.6.38-11-generic x86_64
Architecture: amd64
Date: Fri Oct 14 12:13:20 2011
InstallationMedia: Ubuntu 11.04 "Natty Narwhal" - Release amd64 (20110427.1)
ProcEnviron:
 LANGUAGE=en_US:en
 PATH=(custom, user)
 LANG=en_US.UTF-8
 SHELL=/bin/bash
SourcePackage: apt
UpgradeStatus: No upgrade log present (probably fresh install)

Revision history for this message
AaronSherman (ajs-ajs) wrote :
Revision history for this message
David Kalnischkies (donkult) wrote :

Progress indicators are these spinning wheels, the digits progressing slowly from 0 to 100 (%) and all that stuff. As the manpage says quiet level 1 "produces output suitable for logging" thousands of lines saying
Reading package lists... 0%
Reading package lists... 0%
Reading package lists... 1%
Reading package lists... 2%

aren't that useful and are therefore what is disabled (=thousand of lines as removing previous lines isn't possible on non-tty output). One line telling what is currently done on the other hand is suitable for logging and useful in some cases.

Btw "mysql-server is already the newest version." is not an error message. It is just an information for the user - the command keeps the promise "After the command packge mysql-server is installed" for the user, that it doesn't need to do anything for it isn't an error…

Changed in apt (Ubuntu):
status: New → Invalid
Revision history for this message
AaronSherman (ajs-ajs) wrote :

Your reply doesn't actually help. This is a clear bug. It's either a docs bug (in which case the documentation should clearly state that progress information, such as while file is being read, cannot be silenced without silencing the entire program); or the program doesn't behave the way the documentation describes. As a user reading those docs, what I'm looking for when I go looking for a "quiet" option is a way to make the program output less verbose. In the above sample output, all most uses of the tool require (and certainly the only relevant output to the request, given that I've requested a quiet execution) is that the package is already installed.

Local definitions of what a "progress" message vs. and "error" message are isn't interesting to the user. What's interesting is the result of the command, which as far as I can tell is either the second-to-last line or the last two lines.

If you're set in calling only marching progress percentages "progress indications" then define a term in the documentation for "file progress messages" and create a -q level that squelches those (e.g. -q=2 becomes that and -q=3 becomes silent mode).

Either way, the docs are misleading right now.

Revision history for this message
AaronSherman (ajs-ajs) wrote :

Hmm, that was overly verbose (not to mention, typo-ridden). Here's the short version: there's currently no way to squelch the output to a non-verbose, "did it work or not and why?" However, the documentation, as it reads now seems to imply that such a thing is possible. The documentation should either reflect the reality, or the program should be fixed such that the documentation is correct. IMHO, the latter makes more sense, but I'm not the dev, here.

Revision history for this message
David Kalnischkies (donkult) wrote :

Changing the meaning of -qq might have worked thirteen or maybe even teen years ago, now everything (and your dog) depends on that behavior, so you will make a lot of people and scripts very angry for literally no reason. As i already said, the complete description of -q is "produces output suitable for logging, omitting progress indicators." It doesn't say no progress is visible, it just says that it is possible to log this output and that "indicators" are omitted. It can't get much clearer than that. At least i don't see how, do you have a recommendation for a better wording?

And -qq actually answers your question:
apt-get whatever -qq
will tell you if the request was successful or not and if not it will tell you also why -- no output is a good thing for commandline applications. If you want output add something like
 && echo "successful" || echo "failed"
to your request. That's also why i said that "already installed" is not an error, as if it would be an error you would get a "failed" here even through the request is satisfied and therefore successful.

Revision history for this message
The Gavitron (me-gavitron) wrote :

can't test on a natty box, because I hate unity, but in lucid/maverick even this documented behaviour is broken:

$ sudo apt-get remove -y -q=2 some_package |tee foo
$ cat -v foo
(Reading database ... ^M(Reading database ... 5%^M(Reading database ... 10%^M(Reading database ... 15%^M(Reading database ... 20%^M(Reading database ... 25%^M(Reading database ... 30%^M(Reading database ... 35%^M(Reading database ... 40%^M(Reading database ... 45%^M(Reading database ... 50%^M(Reading database ... 55%^M(Reading database ... 60%^M(Reading database ... 65%^M(Reading database ... 70%^M(Reading database ... 75%^M(Reading database ... 80%^M(Reading database ... 85%^M(Reading database ... 90%^M(Reading database ... 95%^M(Reading database ... 100%^M(Reading database ... 46388 files and directories currently installed.)^M
Removing some_package ...^M

output is the same with any of -q -qq -q=1 -q=2

Changed in apt (Ubuntu):
status: Invalid → Confirmed
Changed in apt (Ubuntu):
status: Confirmed → Won't Fix
Revision history for this message
Julian Andres Klode (juliank) wrote :

Those come from dpkg, not APT.

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.