Я получил текстовый файл (/ etc / hosts), который я хотел бы использовать для автозаполнения. Он содержит 'ip' 'hostnames'
1.2.3.4 host1
2.3.4.5 host2
3.4.5.6 ext_host1
4.5.6.7 ext_host2
У меня есть следующая строка, которую я вставил в файл с именем test. sh
cat /etc/hosts | grep -E '\b([0-9]{1,3}\.){3}[0-9]{1,3}\b' | awk '{print $2}' | sort -u | grep ^$1
Это позволяет мне так его называть : ./test.sh ho
И он возвращает: host1 host2 в этом случае.
Я хотел бы использовать это для автозаполнения моей команды s sh, поэтому, когда я набираю 's sh ho' и нажимаю tab, что он либо автозаполняется, если доступна только одна опция, либо предлагает хост1 или хост2 в этом случае.
Я имел в виду что-то с командой 'complete' внутри моего bash_profile, но немного озадачен. Например, псевдоним $ 2 означает «второй столбец», а $ 1 - аргумент, который я ему передаю. Но как мне сделать разницу между столбцом и аргументом, который я передаю?
cat .bash_profile
# .bash_profile
alias sshhosts=cat /etc/hosts | grep -E '\b([0-9]{1,3}\.){3}[0-9]{1,3}\b' | awk '{print \$2}' | sort -u | grep ^$1
complete -o default -F "${sshhosts[*]}" ssh