Don't print header on stderr
Automated consumers can use 'sed 1d' or similar to remove this header. This probably makes this output *easier* to consume correctly. Having this header show up in consumers' terminal or log output is probably not useful, but hiding it without hiding all error messages would have been more troublesome that just stripping it from stdout. I.e., previously, unsophisticated use would show undesired output: $ some-other-tool This attribute set contains: This attribute set contains: This attribute set contains: This attribute set contains: <Actual some-other-tool output> The simplest way to hide this undesired output would have been nixos-option ... 2>/dev/null, which would hide all error messages. We do not wish to encourage that. Correct use would have been something like: nixos-option ... 2> >( grep --line-buffered -v 'This attribute set contains:') After this change, correct use is simpler: nixos-option ... | sed 1d or nixos-option ... | sed '1/This attribute set contains:/d' if the caller don't know if this invocation of nixos-option will yield an attribute listing or an option description.
This commit is contained in:
parent
2ddd2d0760
commit
84d55716a9
|
@ -430,9 +430,7 @@ void printOption(Context & ctx, Out & out, const std::string & path, Value & opt
|
|||
|
||||
void printListing(Out & out, Value & v)
|
||||
{
|
||||
// Print this header on stderr rather than stdout, presumably to make it
|
||||
// slightly easier to consume this output in other tools.
|
||||
std::cerr << "This attribute set contains:\n";
|
||||
out << "This attribute set contains:\n";
|
||||
for (const auto & a : v.attrs->lexicographicOrder()) {
|
||||
std::string name = a->name;
|
||||
if (!name.empty() && name[0] != '_') {
|
||||
|
|
Loading…
Reference in a new issue