mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-02-02 09:47:03 +03:00
machinectl: add bash completion
This commit is contained in:
parent
0f3e07b7cc
commit
e56056e93d
@ -3951,6 +3951,9 @@ machinectl_LDADD = \
|
||||
rootbin_PROGRAMS += \
|
||||
machinectl
|
||||
|
||||
dist_bashcompletion_DATA += \
|
||||
shell-completion/bash/machinectl
|
||||
|
||||
test_machine_tables_SOURCES = \
|
||||
src/machine/test-machine-tables.c
|
||||
|
||||
|
@ -94,6 +94,14 @@
|
||||
pager.</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><option>--no-legend</option></term>
|
||||
|
||||
<listitem><para>Do not print the legend,
|
||||
i.e. the column headers and the
|
||||
footer.</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><option>--no-ask-password</option></term>
|
||||
|
||||
|
97
shell-completion/bash/machinectl
Normal file
97
shell-completion/bash/machinectl
Normal file
@ -0,0 +1,97 @@
|
||||
# machinectl(1) completion -*- shell-script -*-
|
||||
#
|
||||
# This file is part of systemd.
|
||||
#
|
||||
# Copyright 2014 Thomas H.P. Andersen
|
||||
#
|
||||
# systemd is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU Lesser General Public License as published by
|
||||
# the Free Software Foundation; either version 2.1 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# systemd 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 GNU
|
||||
# General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public License
|
||||
# along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
__contains_word() {
|
||||
local w word=$1; shift
|
||||
for w in "$@"; do
|
||||
[[ $w = "$word" ]] && return
|
||||
done
|
||||
}
|
||||
|
||||
__get_machines() {
|
||||
local a b
|
||||
machinectl list --no-legend --no-pager | { while read a b; do echo " $a"; done; };
|
||||
}
|
||||
|
||||
_machinectl() {
|
||||
local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]}
|
||||
local i verb comps
|
||||
|
||||
local -A OPTS=(
|
||||
[STANDALONE]='--all -a --full --help -h --no-ask-password --no-legend --no-pager --version'
|
||||
[ARG]='--host -H --kill-who -M --machine --property -p --signal -s'
|
||||
)
|
||||
|
||||
local -A VERBS=(
|
||||
[STANDALONE]='list'
|
||||
[MACHINES]='status show terminate kill reboot login'
|
||||
)
|
||||
|
||||
_init_completion || return
|
||||
|
||||
for ((i=0; i <= COMP_CWORD; i++)); do
|
||||
if __contains_word "${COMP_WORDS[i]}" ${VERBS[*]} &&
|
||||
! __contains_word "${COMP_WORDS[i-1]}" ${OPTS[ARG]}; then
|
||||
verb=${COMP_WORDS[i]}
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if __contains_word "$prev" ${OPTS[ARG]}; then
|
||||
case $prev in
|
||||
--signal|-s)
|
||||
comps=$(compgen -A signal)
|
||||
;;
|
||||
--kill-who)
|
||||
comps='all leader'
|
||||
;;
|
||||
--host|-H)
|
||||
comps=$(compgen -A hostname)
|
||||
;;
|
||||
--machine|-M)
|
||||
comps=$( __get_machines )
|
||||
;;
|
||||
--property|-p)
|
||||
comps=''
|
||||
;;
|
||||
esac
|
||||
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
|
||||
return 0
|
||||
fi
|
||||
|
||||
if [[ "$cur" = -* ]]; then
|
||||
COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") )
|
||||
return 0
|
||||
fi
|
||||
|
||||
if [[ -z $verb ]]; then
|
||||
comps=${VERBS[*]}
|
||||
|
||||
elif __contains_word "$verb" ${VERBS[STANDALONE]}; then
|
||||
comps=''
|
||||
|
||||
elif __contains_word "$verb" ${VERBS[MACHINES]}; then
|
||||
comps=$( __get_machines )
|
||||
fi
|
||||
|
||||
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
|
||||
return 0
|
||||
}
|
||||
|
||||
complete -F _machinectl machinectl
|
@ -46,6 +46,7 @@ static char **arg_property = NULL;
|
||||
static bool arg_all = false;
|
||||
static bool arg_full = false;
|
||||
static bool arg_no_pager = false;
|
||||
static bool arg_legend = true;
|
||||
static const char *arg_kill_who = NULL;
|
||||
static int arg_signal = SIGTERM;
|
||||
static bool arg_ask_password = true;
|
||||
@ -84,7 +85,8 @@ static int list_machines(sd_bus *bus, char **args, unsigned n) {
|
||||
return r;
|
||||
}
|
||||
|
||||
printf("%-32s %-9s %-16s\n", "MACHINE", "CONTAINER", "SERVICE");
|
||||
if (arg_legend)
|
||||
printf("%-32s %-9s %-16s\n", "MACHINE", "CONTAINER", "SERVICE");
|
||||
|
||||
r = sd_bus_message_enter_container(reply, SD_BUS_TYPE_ARRAY, "(ssso)");
|
||||
if (r < 0)
|
||||
@ -102,7 +104,8 @@ static int list_machines(sd_bus *bus, char **args, unsigned n) {
|
||||
if (r < 0)
|
||||
return bus_log_parse_error(r);
|
||||
|
||||
printf("\n%u machines listed.\n", k);
|
||||
if (arg_legend)
|
||||
printf("\n%u machines listed.\n", k);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -673,6 +676,7 @@ static int help(void) {
|
||||
" -h --help Show this help\n"
|
||||
" --version Show package version\n"
|
||||
" --no-pager Do not pipe output into a pager\n"
|
||||
" --no-legend Do not show the headers and footers\n"
|
||||
" --no-ask-password Don't prompt for password\n"
|
||||
" -H --host=[USER@]HOST Operate on remote host\n"
|
||||
" -M --machine=CONTAINER Operate on local container\n"
|
||||
@ -699,6 +703,7 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
enum {
|
||||
ARG_VERSION = 0x100,
|
||||
ARG_NO_PAGER,
|
||||
ARG_NO_LEGEND,
|
||||
ARG_KILL_WHO,
|
||||
ARG_NO_ASK_PASSWORD,
|
||||
};
|
||||
@ -710,6 +715,7 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
{ "all", no_argument, NULL, 'a' },
|
||||
{ "full", no_argument, NULL, 'l' },
|
||||
{ "no-pager", no_argument, NULL, ARG_NO_PAGER },
|
||||
{ "no-legend", no_argument, NULL, ARG_NO_LEGEND },
|
||||
{ "kill-who", required_argument, NULL, ARG_KILL_WHO },
|
||||
{ "signal", required_argument, NULL, 's' },
|
||||
{ "host", required_argument, NULL, 'H' },
|
||||
@ -758,6 +764,10 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
arg_no_pager = true;
|
||||
break;
|
||||
|
||||
case ARG_NO_LEGEND:
|
||||
arg_legend = false;
|
||||
break;
|
||||
|
||||
case ARG_NO_ASK_PASSWORD:
|
||||
arg_ask_password = false;
|
||||
break;
|
||||
|
Loading…
x
Reference in New Issue
Block a user