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 commitc24c63e946
) (cherry picked from commitcf76701212
) (cherry picked from commit13344b62b3
) (cherry picked from commitaef67b7e58
)
This commit is contained in:
parent
1e25741909
commit
274d645bdf
@ -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") )
|
||||
|
Loading…
Reference in New Issue
Block a user