mirror of
https://github.com/fish-shell/fish-shell
synced 2024-12-25 12:23:09 +00:00
Refine reading ssh_config (#3146)
https://www.freebsd.org/cgi/man.cgi?query=ssh_config&sektion=5 1. It is possible to add multiple whitespace characters between the keyword (i.e. Host) and the argument(s). 2. It is allowed to have a single = and whitespace between the keyword and the argument(s). 3. It is possible to add multiple host names under a single Host directive by spacing the names apart. 1. and 3. are actual conventions that we use in our team, and I couldn't get auto-complete working for fish without this modification. Modification explained: a. The space between Host(?:name)? and the \w.* was replaced by (?:\s+|\s*=\s*) to match any sequence of whitespace characters, or optional whitespaces with a single =, per spec. b. Result of first replacement is piped through another string replace to switch duplicate whitespace characters to a single space, and then piped to be split by that space. This allows specifying several aliases or host names in a single Host/Hostname definition, also per spec.
This commit is contained in:
parent
d8dd718695
commit
cb74f0f60e
1 changed files with 4 additions and 3 deletions
|
@ -26,9 +26,10 @@ function __fish_print_hostnames -d "Print a list of known hostnames"
|
|||
if test -r $file
|
||||
# Print hosts from system wide ssh configuration file
|
||||
# Note the non-capturing group to avoid printing "name"
|
||||
string match -ri '\s*Host(?:name)? \w.*' < $file | string replace -ri '^\s*Host(?:name)?\s*(\S+)' '$1'
|
||||
set known_hosts $known_hosts (string match -ri '^\s*UserKnownHostsFile|^\s*GlobalKnownHostsFile' <$file \
|
||||
| string replace -ri '.*KnownHostsFile\s*' '')
|
||||
string match -ri '\s*Host(?:name)?(?:\s+|\s*=\s*)\w.*' < $file | string replace -ri '^\s*Host(?:name)?\s*(\S+)' '$1' \
|
||||
| string replace -r '\s+' ' ' | string split ' '
|
||||
set known_hosts $known_hosts (string match -ri '^\s*UserKnownHostsFile|^\s*GlobalKnownHostsFile' < $file \
|
||||
| string replace -ri '.*KnownHostsFile\s*' '')
|
||||
end
|
||||
end
|
||||
for file in $known_hosts
|
||||
|
|
Loading…
Reference in a new issue