mirror of
https://github.com/systemd/systemd.git
synced 2024-12-14 04:33:37 +08:00
bash-completion: properly autocomplete escaped unit names
This commit is contained in:
parent
d7707faec2
commit
72c9177db2
@ -86,6 +86,7 @@ _journalctl() {
|
||||
;;
|
||||
--unit|-u)
|
||||
comps=$(journalctl -F '_SYSTEMD_UNIT' 2>/dev/null)
|
||||
compopt -o filenames
|
||||
;;
|
||||
--user-unit)
|
||||
comps=$(journalctl -F '_SYSTEMD_USER_UNIT' 2>/dev/null)
|
||||
@ -100,7 +101,7 @@ _journalctl() {
|
||||
return 0
|
||||
;;
|
||||
esac
|
||||
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
|
||||
COMPREPLY=( $(compgen -o filenames -W '$comps' -- "$cur") )
|
||||
return 0
|
||||
fi
|
||||
|
||||
|
@ -119,6 +119,7 @@ __get_machines() {
|
||||
|
||||
_systemctl () {
|
||||
local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]}
|
||||
local cur_orig=$cur
|
||||
local i verb comps mode
|
||||
|
||||
local -A OPTS=(
|
||||
@ -221,6 +222,13 @@ _systemctl () {
|
||||
fi
|
||||
done
|
||||
|
||||
# When trying to match a unit name with certain special characters in its name (i.e
|
||||
# foo\x2dbar:01) they get escaped by bash along the way, thus causing any possible
|
||||
# match to fail. Let's unescape such characters in the verb we're trying to
|
||||
# autocomplete to avoid this, however, use the original verb (cur_orig)
|
||||
# during the final match (COMPREPLY)
|
||||
cur="$(echo $cur | xargs echo)"
|
||||
|
||||
if [[ -z $verb ]]; then
|
||||
comps="${VERBS[*]}"
|
||||
|
||||
@ -306,7 +314,7 @@ _systemctl () {
|
||||
| { while read -r a b; do echo " $a"; done; } )
|
||||
fi
|
||||
|
||||
COMPREPLY=( $(compgen -o filenames -W '$comps' -- "$cur") )
|
||||
COMPREPLY=( $(compgen -o filenames -W '$comps' -- "$cur_orig") )
|
||||
return 0
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user