1
1
mirror of https://github.com/systemd/systemd-stable.git synced 2025-01-07 17:17:44 +03:00

bash completion: make systemctl mount-image/bind autocomplete on active services

The verb works only on running service units, so complete on that as the first
parameter, and a local file as the second. The other parameters are inside the
service namespace so we can't autocomplete from the outside, return early.

(cherry picked from commit c24c63e946)
(cherry picked from commit cf76701212)
(cherry picked from commit 13344b62b3)
(cherry picked from commit aef67b7e58)
This commit is contained in:
Luca Boccassi 2023-12-27 17:48:05 +01:00 committed by Luca Boccassi
parent 1e25741909
commit 274d645bdf

View File

@ -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.
@ -219,7 +221,7 @@ _systemctl () {
list-timers list-units list-unit-files poweroff
reboot rescue show-environment suspend get-default
is-system-running preset-all list-automounts'
[FILE]='link switch-root bind mount-image'
[FILE]='link switch-root'
[TARGETS]='set-default'
[MACHINES]='list-machines'
[LOG_LEVEL]='log-level'
@ -227,6 +229,7 @@ _systemctl () {
[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
@ -373,6 +376,15 @@ _systemctl () {
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") )