1
1
mirror of https://github.com/systemd/systemd-stable.git synced 2025-02-26 09:57:26 +03:00

Merge pull request #18596 from keszybz/systemctl-quiet-legend

systemctl: hide legends with --quiet, allow overriding
This commit is contained in:
Lennart Poettering 2021-02-17 23:40:04 +01:00 committed by GitHub
commit dc288ffeab
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
25 changed files with 202 additions and 239 deletions

View File

@ -35,6 +35,15 @@
<listitem><para>Do not query the user for authentication for privileged operations.</para></listitem>
</varlistentry>
<varlistentry id='legend'>
<term><option>--legend=</option><replaceable>BOOL</replaceable></term>
<listitem>
<para>Enable or disable printing of the legend, i.e. column headers and the footer with hints. The
legend is printed by default, unless disabled with <option>--quiet</option> or similar.</para>
</listitem>
</varlistentry>
<varlistentry id='no-legend'>
<term><option>--no-legend</option></term>

View File

@ -2326,7 +2326,7 @@ Jan 12 10:46:45 example.com bluetoothd[8900]: gatt-time-server: Input/output err
<xi:include href="user-system-options.xml" xpointer="machine" />
<xi:include href="standard-options.xml" xpointer="no-pager" />
<xi:include href="standard-options.xml" xpointer="no-legend" />
<xi:include href="standard-options.xml" xpointer="legend" />
<xi:include href="standard-options.xml" xpointer="help" />
<xi:include href="standard-options.xml" xpointer="version" />
</variablelist>

View File

@ -7,7 +7,7 @@
__systemctl() {
local mode=$1; shift 1
systemctl $mode --full --no-legend --no-pager --plain "$@" 2>/dev/null
systemctl $mode --full --legend=no --no-pager --plain "$@" 2>/dev/null
}
__systemd_properties() {
@ -123,7 +123,7 @@ _systemctl () {
local -A OPTS=(
[STANDALONE]='--all -a --reverse --after --before --defaults --force -f --full -l --global
--help -h --no-ask-password --no-block --no-legend --no-pager --no-reload --no-wall --now
--help -h --no-ask-password --no-block --legend=no --no-pager --no-reload --no-wall --now
--quiet -q --system --user --version --runtime --recursive -r --firmware-setup
--show-types --plain --failed --value --fail --dry-run --wait'
[ARG]='--host -H --kill-who --property -p --signal -s --type -t --state --job-mode --root

View File

@ -147,7 +147,7 @@
# @todo _systemd-run has a helper with the same name, so we must redefine
__systemctl()
{
systemctl $_sys_service_mgr --full --no-legend --no-pager --plain "$@" 2>/dev/null
systemctl $_sys_service_mgr --full --legend=no --no-pager --plain "$@" 2>/dev/null
}
@ -480,7 +480,7 @@ _arguments -s \
'--check-inhibitors[Specify if inhibitors should be checked]:mode:_systemctl_check_inhibitors' \
{-q,--quiet}'[Suppress output]' \
'--no-block[Do not wait until operation finished]' \
'--no-legend[Do not print a legend, i.e. the column headers and the footer with hints]' \
'--legend=no[Do not print a legend, i.e. the column headers and the footer with hints]' \
'--no-pager[Do not pipe output into a pager]' \
'--system[Connect to system manager]' \
'--user[Connect to user service manager]' \

View File

@ -37,6 +37,7 @@
#include "main-func.h"
#include "nulstr-util.h"
#include "pager.h"
#include "parse-argument.h"
#include "parse-util.h"
#include "path-util.h"
#include "pretty-print.h"
@ -2340,29 +2341,15 @@ static int parse_argv(int argc, char *argv[]) {
break;
case ARG_MAN:
if (optarg) {
r = parse_boolean(optarg);
if (r < 0)
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
"Failed to parse --man= argument.");
arg_man = r;
} else
arg_man = true;
r = parse_boolean_argument("--man", optarg, &arg_man);
if (r < 0)
return r;
break;
case ARG_GENERATORS:
if (optarg) {
r = parse_boolean(optarg);
if (r < 0)
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
"Failed to parse --generators= argument.");
arg_generators = r;
} else
arg_generators = true;
r = parse_boolean_argument("--generators", optarg, &arg_generators);
if (r < 0)
return r;
break;
case ARG_ITERATIONS:

View File

@ -2471,27 +2471,22 @@ static int parse_argv(int argc, char *argv[]) {
break;
case ARG_EXPECT_REPLY:
r = parse_boolean(optarg);
r = parse_boolean_argument("--expect-reply=", optarg, &arg_expect_reply);
if (r < 0)
return log_error_errno(r, "Failed to parse --expect-reply= parameter '%s': %m", optarg);
arg_expect_reply = r;
return r;
break;
case ARG_AUTO_START:
r = parse_boolean(optarg);
r = parse_boolean_argument("--auto-start=", optarg, &arg_auto_start);
if (r < 0)
return log_error_errno(r, "Failed to parse --auto-start= parameter '%s': %m", optarg);
arg_auto_start = r;
return r;
break;
case ARG_ALLOW_INTERACTIVE_AUTHORIZATION:
r = parse_boolean(optarg);
r = parse_boolean_argument("--allow-interactive-authorization=", optarg,
&arg_allow_interactive_authorization);
if (r < 0)
return log_error_errno(r, "Failed to parse --allow-interactive-authorization= parameter '%s': %m", optarg);
arg_allow_interactive_authorization = r;
return r;
break;
case ARG_TIMEOUT:
@ -2502,19 +2497,15 @@ static int parse_argv(int argc, char *argv[]) {
break;
case ARG_AUGMENT_CREDS:
r = parse_boolean(optarg);
r = parse_boolean_argument("--augment-creds=", optarg, &arg_augment_creds);
if (r < 0)
return log_error_errno(r, "Failed to parse --augment-creds= parameter '%s': %m", optarg);
arg_augment_creds = r;
return r;
break;
case ARG_WATCH_BIND:
r = parse_boolean(optarg);
r = parse_boolean_argument("--watch-bind=", optarg, &arg_watch_bind);
if (r < 0)
return log_error_errno(r, "Failed to parse --watch-bind= parameter '%s': %m", optarg);
arg_watch_bind = r;
return r;
break;
case 'j':

View File

@ -19,6 +19,7 @@
#include "hashmap.h"
#include "main-func.h"
#include "missing_sched.h"
#include "parse-argument.h"
#include "parse-util.h"
#include "path-util.h"
#include "pretty-print.h"
@ -867,12 +868,11 @@ static int parse_argv(int argc, char *argv[]) {
break;
case ARG_RECURSIVE:
r = parse_boolean(optarg);
r = parse_boolean_argument("--recursive=", optarg, &arg_recursive);
if (r < 0)
return log_error_errno(r, "Failed to parse --recursive= argument '%s': %m", optarg);
return r;
arg_recursive = r;
arg_recursive_unset = r == 0;
arg_recursive_unset = !r;
break;
case 'M':

View File

@ -937,15 +937,9 @@ static int parse_argv(int argc, char *argv[]) {
break;
case ARG_DUMP_CORE:
if (!optarg)
arg_dump_core = true;
else {
r = parse_boolean(optarg);
if (r < 0)
return log_error_errno(r, "Failed to parse dump core boolean: \"%s\": %m",
optarg);
arg_dump_core = r;
}
r = parse_boolean_argument("--dump-core", optarg, &arg_dump_core);
if (r < 0)
return r;
break;
case ARG_CRASH_CHVT:
@ -956,27 +950,15 @@ static int parse_argv(int argc, char *argv[]) {
break;
case ARG_CRASH_SHELL:
if (!optarg)
arg_crash_shell = true;
else {
r = parse_boolean(optarg);
if (r < 0)
return log_error_errno(r, "Failed to parse crash shell boolean: \"%s\": %m",
optarg);
arg_crash_shell = r;
}
r = parse_boolean_argument("--crash-shell", optarg, &arg_crash_shell);
if (r < 0)
return r;
break;
case ARG_CRASH_REBOOT:
if (!optarg)
arg_crash_reboot = true;
else {
r = parse_boolean(optarg);
if (r < 0)
return log_error_errno(r, "Failed to parse crash shell boolean: \"%s\": %m",
optarg);
arg_crash_reboot = r;
}
r = parse_boolean_argument("--crash-reboot", optarg, &arg_crash_reboot);
if (r < 0)
return r;
break;
case ARG_CONFIRM_SPAWN:
@ -989,11 +971,9 @@ static int parse_argv(int argc, char *argv[]) {
break;
case ARG_SERVICE_WATCHDOGS:
r = parse_boolean(optarg);
r = parse_boolean_argument("--service-watchdogs=", optarg, &arg_service_watchdogs);
if (r < 0)
return log_error_errno(r, "Failed to parse service watchdogs boolean: \"%s\": %m",
optarg);
arg_service_watchdogs = r;
return r;
break;
case ARG_SHOW_STATUS:

View File

@ -15,6 +15,7 @@
#include "main-func.h"
#include "nulstr-util.h"
#include "pager.h"
#include "parse-argument.h"
#include "parse-util.h"
#include "path-util.h"
#include "pretty-print.h"
@ -586,7 +587,7 @@ static int parse_argv(int argc, char *argv[]) {
{}
};
int c;
int c, r;
assert(argc >= 1);
assert(argv);
@ -616,18 +617,10 @@ static int parse_argv(int argc, char *argv[]) {
}
case ARG_DIFF:
if (!optarg)
arg_diff = 1;
else {
int b;
b = parse_boolean(optarg);
if (b < 0)
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
"Failed to parse diff boolean.");
arg_diff = b;
}
r = parse_boolean_argument("--diff", optarg, NULL);
if (r < 0)
return r;
arg_diff = r;
break;
case '?':

View File

@ -14,6 +14,7 @@
#include "journal-remote.h"
#include "main-func.h"
#include "memory-util.h"
#include "parse-argument.h"
#include "pretty-print.h"
#include "process-util.h"
#include "rlimit-util.h"
@ -34,8 +35,8 @@ static const char* arg_listen_raw = NULL;
static const char* arg_listen_http = NULL;
static const char* arg_listen_https = NULL;
static char** arg_files = NULL; /* Do not free this. */
static int arg_compress = true;
static int arg_seal = false;
static bool arg_compress = true;
static bool arg_seal = false;
static int http_socket = -1, https_socket = -1;
static char** arg_gnutls_log = NULL;
@ -965,34 +966,20 @@ static int parse_argv(int argc, char *argv[]) {
break;
case ARG_COMPRESS:
if (optarg) {
r = parse_boolean(optarg);
if (r < 0)
return log_error_errno(r, "Failed to parse --compress= parameter.");
arg_compress = !!r;
} else
arg_compress = true;
r = parse_boolean_argument("--compress", optarg, &arg_compress);
if (r < 0)
return r;
break;
case ARG_SEAL:
if (optarg) {
r = parse_boolean(optarg);
if (r < 0)
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
"Failed to parse --seal= parameter.");
arg_seal = !!r;
} else
arg_seal = true;
r = parse_boolean_argument("--seal", optarg, &arg_seal);
if (r < 0)
return r;
break;
case ARG_GNUTLS_LOG: {
case ARG_GNUTLS_LOG:
#if HAVE_GNUTLS
const char* p = optarg;
for (;;) {
for (const char* p = optarg;;) {
_cleanup_free_ char *word = NULL;
r = extract_first_word(&p, &word, ",", 0);
@ -1011,7 +998,6 @@ static int parse_argv(int argc, char *argv[]) {
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
"Option --gnutls-log is not available.");
#endif
}
case '?':
return -EINVAL;

View File

@ -22,6 +22,7 @@
#include "log.h"
#include "main-func.h"
#include "mkdir.h"
#include "parse-argument.h"
#include "parse-util.h"
#include "path-util.h"
#include "pretty-print.h"
@ -356,7 +357,7 @@ static int open_file_for_upload(Uploader *u, const char *filename) {
u->input = fd;
if (arg_follow) {
if (arg_follow != 0) {
r = sd_event_add_io(u->events, &u->input_event,
fd, EPOLLIN, dispatch_fd_input, u);
if (r < 0) {
@ -747,16 +748,10 @@ static int parse_argv(int argc, char *argv[]) {
break;
case ARG_FOLLOW:
if (optarg) {
r = parse_boolean(optarg);
if (r < 0)
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
"Failed to parse --follow= parameter.");
arg_follow = !!r;
} else
arg_follow = true;
r = parse_boolean_argument("--follow", optarg, NULL);
if (r < 0)
return r;
arg_follow = r;
break;
case ARG_SAVE_STATE:
@ -857,7 +852,7 @@ static int run(int argc, char **argv) {
r = open_journal_for_upload(&u, j,
arg_cursor ?: u.last_cursor,
arg_cursor ? arg_after_cursor : true,
!!arg_follow);
arg_follow != 0);
if (r < 0)
return r;
}

View File

@ -12,6 +12,7 @@
#include "alloc-util.h"
#include "fd-util.h"
#include "main-func.h"
#include "parse-argument.h"
#include "parse-util.h"
#include "pretty-print.h"
#include "string-util.h"
@ -67,7 +68,7 @@ static int parse_argv(int argc, char *argv[]) {
{}
};
int c;
int c, r;
assert(argc >= 0);
assert(argv);
@ -104,16 +105,11 @@ static int parse_argv(int argc, char *argv[]) {
"Failed to parse stderr priority value.");
break;
case ARG_LEVEL_PREFIX: {
int k;
k = parse_boolean(optarg);
if (k < 0)
return log_error_errno(k, "Failed to parse level prefix value.");
arg_level_prefix = k;
case ARG_LEVEL_PREFIX:
r = parse_boolean_argument("--level-prefix=", optarg, &arg_level_prefix);
if (r < 0)
return r;
break;
}
case '?':
return -EINVAL;

View File

@ -23,6 +23,7 @@
#include "mount-util.h"
#include "mountpoint-util.h"
#include "pager.h"
#include "parse-argument.h"
#include "parse-util.h"
#include "path-util.h"
#include "pretty-print.h"
@ -265,11 +266,9 @@ static int parse_argv(int argc, char *argv[]) {
}
case ARG_FSCK:
r = parse_boolean(optarg);
r = parse_boolean_argument("--fsck=", optarg, &arg_fsck);
if (r < 0)
return log_error_errno(r, "Failed to parse --fsck= argument: %s", optarg);
arg_fsck = r;
return r;
break;
case ARG_DESCRIPTION:
@ -289,9 +288,9 @@ static int parse_argv(int argc, char *argv[]) {
break;
case ARG_AUTOMOUNT:
r = parse_boolean(optarg);
r = parse_boolean_argument("--automount=", optarg, NULL);
if (r < 0)
return log_error_errno(r, "--automount= expects a valid boolean parameter: %s", optarg);
return r;
arg_action = r ? ACTION_AUTOMOUNT : ACTION_MOUNT;
break;

View File

@ -44,8 +44,8 @@
#include "mkdir.h"
#include "mkfs-util.h"
#include "mount-util.h"
#include "parse-util.h"
#include "parse-argument.h"
#include "parse-util.h"
#include "path-util.h"
#include "pretty-print.h"
#include "proc-cmdline.h"
@ -3575,11 +3575,9 @@ static int parse_argv(int argc, char *argv[]) {
break;
case ARG_DRY_RUN:
r = parse_boolean(optarg);
r = parse_boolean_argument("--dry-run=", optarg, &arg_dry_run);
if (r < 0)
return log_error_errno(r, "Failed to parse --dry-run= parameter: %s", optarg);
dry_run = r;
return r;
break;
case ARG_EMPTY:
@ -3604,18 +3602,15 @@ static int parse_argv(int argc, char *argv[]) {
break;
case ARG_DISCARD:
r = parse_boolean(optarg);
r = parse_boolean_argument("--discard=", optarg, &arg_discard);
if (r < 0)
return log_error_errno(r, "Failed to parse --discard= parameter: %s", optarg);
arg_discard = r;
return r;
break;
case ARG_FACTORY_RESET:
r = parse_boolean(optarg);
r = parse_boolean_argument("--factory-reset=", optarg, NULL);
if (r < 0)
return log_error_errno(r, "Failed to parse --factory-reset= parameter: %s", optarg);
return r;
arg_factory_reset = r;
break;
@ -3646,10 +3641,9 @@ static int parse_argv(int argc, char *argv[]) {
break;
case ARG_PRETTY:
r = parse_boolean(optarg);
r = parse_boolean_argument("--pretty=", optarg, NULL);
if (r < 0)
return log_error_errno(r, "Failed to parse --pretty= parameter: %s", optarg);
return r;
arg_pretty = r;
break;

View File

@ -23,6 +23,7 @@
#include "missing_network.h"
#include "netlink-util.h"
#include "pager.h"
#include "parse-argument.h"
#include "parse-util.h"
#include "pretty-print.h"
#include "resolvconf-compat.h"
@ -2811,11 +2812,9 @@ static int compat_parse_argv(int argc, char *argv[]) {
break;
case ARG_LEGEND:
r = parse_boolean(optarg);
r = parse_boolean_argument("--legend=", optarg, &arg_legend);
if (r < 0)
return log_error_errno(r, "Failed to parse --legend= argument");
arg_legend = r;
return r;
break;
case 'p':
@ -2877,30 +2876,30 @@ static int compat_parse_argv(int argc, char *argv[]) {
break;
case ARG_CNAME:
r = parse_boolean(optarg);
r = parse_boolean_argument("--cname=", optarg, NULL);
if (r < 0)
return log_error_errno(r, "Failed to parse --cname= argument.");
return r;
SET_FLAG(arg_flags, SD_RESOLVED_NO_CNAME, r == 0);
break;
case ARG_SERVICE_ADDRESS:
r = parse_boolean(optarg);
r = parse_boolean_argument("--service-address=", optarg, NULL);
if (r < 0)
return log_error_errno(r, "Failed to parse --service-address= argument.");
return r;
SET_FLAG(arg_flags, SD_RESOLVED_NO_ADDRESS, r == 0);
break;
case ARG_SERVICE_TXT:
r = parse_boolean(optarg);
r = parse_boolean_argument("--service-txt=", optarg, NULL);
if (r < 0)
return log_error_errno(r, "Failed to parse --service-txt= argument.");
return r;
SET_FLAG(arg_flags, SD_RESOLVED_NO_TXT, r == 0);
break;
case ARG_SEARCH:
r = parse_boolean(optarg);
r = parse_boolean_argument("--search=", optarg, NULL);
if (r < 0)
return log_error_errno(r, "Failed to parse --search argument.");
return r;
SET_FLAG(arg_flags, SD_RESOLVED_NO_SEARCH, r == 0);
break;
@ -3107,11 +3106,9 @@ static int native_parse_argv(int argc, char *argv[]) {
break;
case ARG_LEGEND:
r = parse_boolean(optarg);
r = parse_boolean_argument("--legend=", optarg, &arg_legend);
if (r < 0)
return log_error_errno(r, "Failed to parse --legend= argument");
arg_legend = r;
return r;
break;
case 'p':
@ -3157,72 +3154,72 @@ static int native_parse_argv(int argc, char *argv[]) {
break;
case ARG_CNAME:
r = parse_boolean(optarg);
r = parse_boolean_argument("--cname=", optarg, NULL);
if (r < 0)
return log_error_errno(r, "Failed to parse --cname= argument.");
return r;
SET_FLAG(arg_flags, SD_RESOLVED_NO_CNAME, r == 0);
break;
case ARG_VALIDATE:
r = parse_boolean(optarg);
r = parse_boolean_argument("--validate=", optarg, NULL);
if (r < 0)
return log_error_errno(r, "Failed to parse --validate= argument.");
return r;
SET_FLAG(arg_flags, SD_RESOLVED_NO_VALIDATE, r == 0);
break;
case ARG_SYNTHESIZE:
r = parse_boolean(optarg);
r = parse_boolean_argument("--synthesize=", optarg, NULL);
if (r < 0)
return log_error_errno(r, "Failed to parse --synthesize= argument.");
return r;
SET_FLAG(arg_flags, SD_RESOLVED_NO_SYNTHESIZE, r == 0);
break;
case ARG_CACHE:
r = parse_boolean(optarg);
r = parse_boolean_argument("--cache=", optarg, NULL);
if (r < 0)
return log_error_errno(r, "Failed to parse --cache= argument.");
return r;
SET_FLAG(arg_flags, SD_RESOLVED_NO_CACHE, r == 0);
break;
case ARG_ZONE:
r = parse_boolean(optarg);
r = parse_boolean_argument("--zone=", optarg, NULL);
if (r < 0)
return log_error_errno(r, "Failed to parse --zone= argument.");
return r;
SET_FLAG(arg_flags, SD_RESOLVED_NO_ZONE, r == 0);
break;
case ARG_TRUST_ANCHOR:
r = parse_boolean(optarg);
r = parse_boolean_argument("--trust-anchor=", optarg, NULL);
if (r < 0)
return log_error_errno(r, "Failed to parse --trust-anchor= argument.");
return r;
SET_FLAG(arg_flags, SD_RESOLVED_NO_TRUST_ANCHOR, r == 0);
break;
case ARG_NETWORK:
r = parse_boolean(optarg);
r = parse_boolean_argument("--network=", optarg, NULL);
if (r < 0)
return log_error_errno(r, "Failed to parse --network= argument.");
return r;
SET_FLAG(arg_flags, SD_RESOLVED_NO_NETWORK, r == 0);
break;
case ARG_SERVICE_ADDRESS:
r = parse_boolean(optarg);
r = parse_boolean_argument("--service-address=", optarg, NULL);
if (r < 0)
return log_error_errno(r, "Failed to parse --service-address= argument.");
return r;
SET_FLAG(arg_flags, SD_RESOLVED_NO_ADDRESS, r == 0);
break;
case ARG_SERVICE_TXT:
r = parse_boolean(optarg);
r = parse_boolean_argument("--service-txt=", optarg, NULL);
if (r < 0)
return log_error_errno(r, "Failed to parse --service-txt= argument.");
return r;
SET_FLAG(arg_flags, SD_RESOLVED_NO_TXT, r == 0);
break;
case ARG_SEARCH:
r = parse_boolean(optarg);
r = parse_boolean_argument("--search=", optarg, NULL);
if (r < 0)
return log_error_errno(r, "Failed to parse --search argument.");
return r;
SET_FLAG(arg_flags, SD_RESOLVED_NO_SEARCH, r == 0);
break;

View File

@ -10,6 +10,27 @@
/* All functions in this file emit warnigs. */
int parse_boolean_argument(const char *optname, const char *s, bool *ret) {
int r;
/* Returns the result through *ret and the return value. */
if (s) {
r = parse_boolean(s);
if (r < 0)
return log_error_errno(r, "Failed to parse boolean argument to %s: %s.", optname, s);
if (ret)
*ret = r;
return r;
} else {
/* s may be NULL. This is controlled by getopt_long() parameters. */
if (ret)
*ret = true;
return true;
}
}
int parse_json_argument(const char *s, JsonFormatFlags *ret) {
assert(s);
assert(ret);

View File

@ -3,6 +3,7 @@
#include "json.h"
int parse_boolean_argument(const char *optname, const char *s, bool *ret);
int parse_json_argument(const char *s, JsonFormatFlags *ret);
int parse_path_argument(const char *path, bool suppress_root, char **arg);
int parse_signal_argument(const char *s, int *ret);

View File

@ -64,7 +64,7 @@ static int output_jobs_list(sd_bus *bus, const struct job_info* jobs, unsigned n
assert(n == 0 || jobs);
if (n == 0) {
if (!arg_no_legend) {
if (arg_legend != 0) {
on = ansi_highlight_green();
off = ansi_normal();
@ -79,7 +79,7 @@ static int output_jobs_list(sd_bus *bus, const struct job_info* jobs, unsigned n
if (!table)
return log_oom();
table_set_header(table, !arg_no_legend);
table_set_header(table, arg_legend != 0);
if (arg_full)
table_set_width(table, 0);
@ -111,7 +111,7 @@ static int output_jobs_list(sd_bus *bus, const struct job_info* jobs, unsigned n
if (r < 0)
return log_error_errno(r, "Failed to print the table: %m");
if (!arg_no_legend) {
if (arg_legend != 0) {
on = ansi_highlight();
off = ansi_normal();

View File

@ -157,7 +157,7 @@ static int output_machines_list(struct machine_info *machine_infos, unsigned n)
if (!table)
return log_oom();
table_set_header(table, !arg_no_legend);
table_set_header(table, arg_legend != 0);
if (arg_plain) {
/* Hide the 'glyph' column when --plain is requested */
r = table_hide_column_from_display(table, 0);
@ -210,7 +210,7 @@ static int output_machines_list(struct machine_info *machine_infos, unsigned n)
if (r < 0)
return r;
if (!arg_no_legend) {
if (arg_legend != 0) {
printf("\n");
if (state_missing && geteuid() != 0)
printf("Notice: some information only available to privileged users was not shown.\n");

View File

@ -58,7 +58,7 @@ static int output_unit_file_list(const UnitFileList *units, unsigned c) {
if (!table)
return log_oom();
table_set_header(table, !arg_no_legend);
table_set_header(table, arg_legend != 0);
if (arg_full)
table_set_width(table, 0);
@ -127,7 +127,7 @@ static int output_unit_file_list(const UnitFileList *units, unsigned c) {
if (r < 0)
return r;
if (!arg_no_legend)
if (arg_legend != 0)
printf("\n%u unit files listed.\n", c);
return 0;

View File

@ -97,7 +97,7 @@ static int output_units_list(const UnitInfo *unit_infos, unsigned c) {
if (!table)
return log_oom();
table_set_header(table, !arg_no_legend);
table_set_header(table, arg_legend != 0);
if (arg_plain) {
/* Hide the 'glyph' column when --plain is requested */
r = table_hide_column_from_display(table, 0);
@ -177,7 +177,7 @@ static int output_units_list(const UnitInfo *unit_infos, unsigned c) {
if (r < 0)
return r;
if (!arg_no_legend) {
if (arg_legend != 0) {
const char *on, *off;
size_t records = table_get_rows(table) - 1;
@ -365,7 +365,7 @@ static int output_sockets_list(struct socket_info *socket_infos, unsigned cs) {
return log_error_errno(r, "Failed to set columns to display: %m");
}
table_set_header(table, !arg_no_legend);
table_set_header(table, arg_legend != 0);
if (arg_full)
table_set_width(table, 0);
@ -416,7 +416,7 @@ static int output_sockets_list(struct socket_info *socket_infos, unsigned cs) {
if (r < 0)
return r;
if (!arg_no_legend) {
if (arg_legend != 0) {
printf("\n%s%u sockets listed.%s\n", on, cs, off);
if (!arg_all)
printf("Pass --all to see loaded but inactive sockets, too.\n");
@ -610,7 +610,7 @@ static int output_timers_list(struct timer_info *timer_infos, unsigned n) {
if (!table)
return log_oom();
table_set_header(table, !arg_no_legend);
table_set_header(table, arg_legend != 0);
if (arg_full)
table_set_width(table, 0);
@ -655,7 +655,7 @@ static int output_timers_list(struct timer_info *timer_infos, unsigned n) {
if (r < 0)
return r;
if (!arg_no_legend) {
if (arg_legend != 0) {
printf("\n%s%u timers listed.%s\n", on, n, off);
if (!arg_all)
printf("Pass --all to see loaded but inactive timers, too.\n");

View File

@ -68,7 +68,7 @@ const char *arg_job_mode = "replace";
UnitFileScope arg_scope = UNIT_FILE_SYSTEM;
bool arg_wait = false;
bool arg_no_block = false;
bool arg_no_legend = false;
int arg_legend = -1; /* -1: true, unless --quiet is passed, 1: true */
PagerFlags arg_pager_flags = 0;
bool arg_no_wtmp = false;
bool arg_no_sync = false;
@ -268,7 +268,7 @@ static int systemctl_help(void) {
" --no-block Do not wait until operation finished\n"
" --no-wall Don't send wall message before halt/power-off/reboot\n"
" --no-reload Don't reload daemon after en-/dis-abling unit files\n"
" --no-legend Do not print a legend (column headers and hints)\n"
" --legend=BOOL Enable/disable the legend (column headers and hints)\n"
" --no-pager Do not pipe output into a pager\n"
" --no-ask-password Do not ask for system passwords\n"
" --global Enable/disable/mask unit files globally\n"
@ -310,88 +310,89 @@ static int systemctl_help(void) {
}
static void help_types(void) {
if (!arg_no_legend)
if (arg_legend != 0)
puts("Available unit types:");
DUMP_STRING_TABLE(unit_type, UnitType, _UNIT_TYPE_MAX);
}
static void help_states(void) {
if (!arg_no_legend)
if (arg_legend != 0)
puts("Available unit load states:");
DUMP_STRING_TABLE(unit_load_state, UnitLoadState, _UNIT_LOAD_STATE_MAX);
if (!arg_no_legend)
if (arg_legend != 0)
puts("\nAvailable unit active states:");
DUMP_STRING_TABLE(unit_active_state, UnitActiveState, _UNIT_ACTIVE_STATE_MAX);
if (!arg_no_legend)
if (arg_legend != 0)
puts("\nAvailable unit file states:");
DUMP_STRING_TABLE(unit_file_state, UnitFileState, _UNIT_FILE_STATE_MAX);
if (!arg_no_legend)
if (arg_legend != 0)
puts("\nAvailable automount unit substates:");
DUMP_STRING_TABLE(automount_state, AutomountState, _AUTOMOUNT_STATE_MAX);
if (!arg_no_legend)
if (arg_legend != 0)
puts("\nAvailable device unit substates:");
DUMP_STRING_TABLE(device_state, DeviceState, _DEVICE_STATE_MAX);
if (!arg_no_legend)
if (arg_legend != 0)
puts("\nAvailable mount unit substates:");
DUMP_STRING_TABLE(mount_state, MountState, _MOUNT_STATE_MAX);
if (!arg_no_legend)
if (arg_legend != 0)
puts("\nAvailable path unit substates:");
DUMP_STRING_TABLE(path_state, PathState, _PATH_STATE_MAX);
if (!arg_no_legend)
if (arg_legend != 0)
puts("\nAvailable scope unit substates:");
DUMP_STRING_TABLE(scope_state, ScopeState, _SCOPE_STATE_MAX);
if (!arg_no_legend)
if (arg_legend != 0)
puts("\nAvailable service unit substates:");
DUMP_STRING_TABLE(service_state, ServiceState, _SERVICE_STATE_MAX);
if (!arg_no_legend)
if (arg_legend != 0)
puts("\nAvailable slice unit substates:");
DUMP_STRING_TABLE(slice_state, SliceState, _SLICE_STATE_MAX);
if (!arg_no_legend)
if (arg_legend != 0)
puts("\nAvailable socket unit substates:");
DUMP_STRING_TABLE(socket_state, SocketState, _SOCKET_STATE_MAX);
if (!arg_no_legend)
if (arg_legend != 0)
puts("\nAvailable swap unit substates:");
DUMP_STRING_TABLE(swap_state, SwapState, _SWAP_STATE_MAX);
if (!arg_no_legend)
if (arg_legend != 0)
puts("\nAvailable target unit substates:");
DUMP_STRING_TABLE(target_state, TargetState, _TARGET_STATE_MAX);
if (!arg_no_legend)
if (arg_legend != 0)
puts("\nAvailable timer unit substates:");
DUMP_STRING_TABLE(timer_state, TimerState, _TIMER_STATE_MAX);
}
static int systemctl_parse_argv(int argc, char *argv[]) {
enum {
ARG_FAIL = 0x100,
ARG_FAIL = 0x100, /* compatibility only */
ARG_REVERSE,
ARG_AFTER,
ARG_BEFORE,
ARG_CHECK_INHIBITORS,
ARG_DRY_RUN,
ARG_SHOW_TYPES,
ARG_IRREVERSIBLE,
ARG_IGNORE_DEPENDENCIES,
ARG_IRREVERSIBLE, /* compatibility only */
ARG_IGNORE_DEPENDENCIES, /* compatibility only */
ARG_VALUE,
ARG_VERSION,
ARG_USER,
ARG_SYSTEM,
ARG_GLOBAL,
ARG_NO_BLOCK,
ARG_NO_LEGEND,
ARG_LEGEND,
ARG_NO_LEGEND, /* compatibility only */
ARG_NO_PAGER,
ARG_NO_WALL,
ARG_ROOT,
@ -443,7 +444,8 @@ static int systemctl_parse_argv(int argc, char *argv[]) {
{ "global", no_argument, NULL, ARG_GLOBAL },
{ "wait", no_argument, NULL, ARG_WAIT },
{ "no-block", no_argument, NULL, ARG_NO_BLOCK },
{ "no-legend", no_argument, NULL, ARG_NO_LEGEND },
{ "legend", required_argument, NULL, ARG_LEGEND },
{ "no-legend", no_argument, NULL, ARG_NO_LEGEND }, /* compatibility only */
{ "no-pager", no_argument, NULL, ARG_NO_PAGER },
{ "no-wall", no_argument, NULL, ARG_NO_WALL },
{ "dry-run", no_argument, NULL, ARG_DRY_RUN },
@ -630,7 +632,14 @@ static int systemctl_parse_argv(int argc, char *argv[]) {
break;
case ARG_NO_LEGEND:
arg_no_legend = true;
arg_legend = false;
break;
case ARG_LEGEND:
r = parse_boolean_argument("--legend", optarg, NULL);
if (r < 0)
return r;
arg_legend = r;
break;
case ARG_NO_PAGER:
@ -663,6 +672,10 @@ static int systemctl_parse_argv(int argc, char *argv[]) {
case 'q':
arg_quiet = true;
if (arg_legend < 0)
arg_legend = false;
break;
case 'f':
@ -721,7 +734,7 @@ static int systemctl_parse_argv(int argc, char *argv[]) {
optarg);
if (OUTPUT_MODE_IS_JSON(arg_output)) {
arg_no_legend = true;
arg_legend = false;
arg_plain = true;
}
break;

View File

@ -52,7 +52,7 @@ extern const char *arg_job_mode;
extern UnitFileScope arg_scope;
extern bool arg_wait;
extern bool arg_no_block;
extern bool arg_no_legend;
extern int arg_legend;
extern PagerFlags arg_pager_flags;
extern bool arg_no_wtmp;
extern bool arg_no_sync;

View File

@ -10,6 +10,7 @@
#include "format-util.h"
#include "main-func.h"
#include "pager.h"
#include "parse-argument.h"
#include "parse-util.h"
#include "pretty-print.h"
#include "socket-util.h"
@ -720,17 +721,17 @@ static int parse_argv(int argc, char *argv[]) {
break;
case ARG_WITH_NSS:
r = parse_boolean(optarg);
r = parse_boolean_argument("--with-nss=", optarg, NULL);
if (r < 0)
return log_error_errno(r, "Failed to parse --with-nss= parameter: %s", optarg);
return r;
SET_FLAG(arg_userdb_flags, USERDB_AVOID_NSS, !r);
break;
case ARG_SYNTHESIZE:
r = parse_boolean(optarg);
r = parse_boolean_argument("--synthesize=", optarg, NULL);
if (r < 0)
return log_error_errno(r, "Failed to parse --synthesize= parameter: %s", optarg);
return r;
SET_FLAG(arg_userdb_flags, USERDB_DONT_SYNTHESIZE, !r);
break;