mirror of
https://github.com/systemd/systemd
synced 2024-07-22 02:34:54 +00:00
Merge pull request #30643 from bluca/completion
bash completion additions for systemctl/systemd-analyze
This commit is contained in:
commit
3a30d81238
|
@ -62,6 +62,8 @@ __get_template_names () { __systemctl $1 list-unit-files "$2*" \
|
|||
| { while read -r a b; do [[ $a =~ @\. ]] && echo " ${a%%@.*}@"; done; }; }
|
||||
__get_active_units () { __systemctl $1 list-units "$2*" \
|
||||
| { while read -r a b; do echo " $a"; done; }; }
|
||||
__get_active_services() { __systemctl $1 list-units "$2*.service" \
|
||||
| { while read -r a b; do echo " $a"; done; }; }
|
||||
|
||||
__get_not_masked_unit_files() {
|
||||
# filter out masked, not-found, or template units.
|
||||
|
@ -231,12 +233,15 @@ _systemctl () {
|
|||
list-timers list-units list-unit-files poweroff
|
||||
reboot rescue show-environment suspend get-default
|
||||
is-system-running preset-all list-automounts list-paths'
|
||||
[FILE]='link switch-root bind mount-image'
|
||||
[FILE]='link switch-root'
|
||||
[TARGETS]='set-default'
|
||||
[MACHINES]='list-machines'
|
||||
[LOG_LEVEL]='log-level'
|
||||
[LOG_TARGET]='log-target'
|
||||
[SERVICE_LOG_LEVEL]='service-log-level'
|
||||
[SERVICE_LOG_TARGET]='service-log-target'
|
||||
[SERVICE_WATCHDOGS]='service-watchdogs'
|
||||
[MOUNT]='bind mount-image'
|
||||
)
|
||||
|
||||
for ((i=0; i < COMP_CWORD; i++)); do
|
||||
|
@ -365,8 +370,33 @@ _systemctl () {
|
|||
comps='debug info notice warning err crit alert emerg'
|
||||
elif __contains_word "$verb" ${VERBS[LOG_TARGET]}; then
|
||||
comps='console journal kmsg journal-or-kmsg null'
|
||||
elif __contains_word "$verb" ${VERBS[SERVICE_LOG_LEVEL]}; then
|
||||
if __contains_word "$prev" ${VERBS[SERVICE_LOG_LEVEL]}; then
|
||||
comps=$( __get_all_unit_files $mode "$cur" )
|
||||
elif __contains_word "$prev" debug info notice warning err crit alert emerg; then
|
||||
return 0
|
||||
else
|
||||
comps='debug info notice warning err crit alert emerg'
|
||||
fi
|
||||
elif __contains_word "$verb" ${VERBS[SERVICE_LOG_TARGET]}; then
|
||||
if __contains_word "$prev" ${VERBS[SERVICE_LOG_TARGET]}; then
|
||||
comps=$( __get_all_unit_files $mode "$cur" )
|
||||
elif __contains_word "$prev" console journal kmsg journal-or-kmsg null; then
|
||||
return 0
|
||||
else
|
||||
comps='console journal kmsg journal-or-kmsg null'
|
||||
fi
|
||||
elif __contains_word "$verb" ${VERBS[SERVICE_WATCHDOGS]}; then
|
||||
comps='on off'
|
||||
elif __contains_word "$verb" ${VERBS[MOUNT]}; then
|
||||
if __contains_word "$prev" ${VERBS[MOUNT]}; then
|
||||
comps=$( __get_active_services $mode "$cur" )
|
||||
elif [[ "$prev" =~ .service ]]; then
|
||||
comps=$( compgen -A file -- "$cur" )
|
||||
compopt -o filenames
|
||||
else
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
|
||||
COMPREPLY=( $(compgen -o filenames -W '$comps' -- "$cur_orig") )
|
||||
|
|
|
@ -51,6 +51,10 @@ __get_syscall_sets() {
|
|||
done
|
||||
}
|
||||
|
||||
__get_architectures() {
|
||||
systemd-analyze --no-legend --no-pager architectures | { while read -r a b; do echo " $a"; done }
|
||||
}
|
||||
|
||||
_systemd_analyze() {
|
||||
local i verb comps mode
|
||||
local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]} words cword
|
||||
|
@ -73,6 +77,7 @@ _systemd_analyze() {
|
|||
[CONDITION]='condition'
|
||||
[INSPECT_ELF]='inspect-elf'
|
||||
[PLOT]='plot'
|
||||
[ARCHITECTURES]='architectures'
|
||||
)
|
||||
|
||||
local CONFIGS='systemd/bootchart.conf systemd/coredump.conf systemd/journald.conf
|
||||
|
@ -198,6 +203,13 @@ _systemd_analyze() {
|
|||
if [[ $cur = -* ]]; then
|
||||
comps='--help --version --system --user --global --no-pager --json=off --json=pretty --json=short --table --no-legend'
|
||||
fi
|
||||
|
||||
elif __contains_word "$verb" ${VERBS[ARCHITECTURES]}; then
|
||||
if [[ $cur = -* ]]; then
|
||||
comps='--help --version --no-pager --json=off --json=pretty --json=short --no-legend'
|
||||
else
|
||||
comps=$( __get_architectures )
|
||||
fi
|
||||
fi
|
||||
|
||||
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
|
||||
|
|
|
@ -597,7 +597,7 @@ static int parse_argv(int argc, char *argv[]) {
|
|||
if (streq_ptr(argv[optind], "condition") && arg_unit && optind < argc - 1)
|
||||
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "No conditions can be passed if --unit= is used.");
|
||||
|
||||
if ((!arg_legend && !streq_ptr(argv[optind], "plot")) ||
|
||||
if ((!arg_legend && !STRPTR_IN_SET(argv[optind], "plot", "architectures")) ||
|
||||
(streq_ptr(argv[optind], "plot") && !arg_legend && !arg_table && FLAGS_SET(arg_json_format_flags, JSON_FORMAT_OFF)))
|
||||
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Option --no-legend is only supported for plot with either --table or --json=.");
|
||||
|
||||
|
|
Loading…
Reference in a new issue