Попробуйте изменить "$($choice)"
на просто$choice
(без кавычек )--, что должно преобразовать вывод awk в слова и создать команду ssh из текущего процесса
Похоже, проблема
if (ip || alias && alias != "*") {
if (port == "") port = "22"
print "ssh " username "@" ip " -i " id_file " -p " port
}
Что произойдет, если ip
пусто, а alias
нет? Вы войдете в блок, но нигде не используете псевдоним. Вам может понадобиться
if (!ip) { ip = alias }
if (ip && ip != "*") {...
Это может работать как альтернативный способ структурирования функции. Не проверено:
remote_host_connect() {
awk '...' $HOME/.ssh/config \
| fzf \
| sh </dev/tty >/dev/tty 2>&1
}
У меня это работает как отдельный скрипт:
#!/bin/bash
eval "$(
awk -v RS= -F'[[:space:]]+' '{
for (i=1; i<NF; i+=2)
data[$i]=$(i+1)
ip = (data["HostName"] ? data["HostName"] : data["Host"])
if (ip && ip != "*")
printf "ssh %s@%s %s %s\n",
(data["User"] ? data["User"] : ENVIRON["LOGNAME"]),
ip,
(data["IdentityFile"] ? "-i " data["IdentityFile"] : ""),
"-p " (data["Port"] ? data["Port"] : 22)
}' ~/.ssh/config \
| fzf
)"