Я недавно обновил свой Arch и проблема, кажется, устранена! Однако до этого я просто определил псевдоним в моем файле .zshrc:
alias resize='killall VBoxClient && VBoxClient-all'
Так что всякий раз, когда мне нужно было исправить размер экрана, я просто вводил эту команду в терминале. Это не совсем то решение, о котором я просил, но оно все равно очень помогло.
Вы можете выполнить все обработка текста с помощью одного вызова AWK, упрощенная, поскольку вас интересует только пересылка:
#!/bin/sh
awk '/^Host / { host = $2 } host && /(Remote|Local|Dynamic)Forward/ { port=$2; gsub(".*:", "", port); print host, port }' ~/.ssh/config | while read host port; do
nc -z 127.0.0.1 "${port}" || ssh -fqN "${host}" > /dev/null 2>&1
done
Написанный более разборчиво, сценарий AWK
/^Host / { host = $2 }
host && /(Remote|Local|Dynamic)Forward/ {
port=$2; gsub(".*:", "", port); print host, port
}
Сохраняет хост каждый раз, когда он видит оператор «Host», а затем в строках, встречающихся во время определен допустимый хост, и соответствие одному из принятых операторов «Forward» извлекает целевой порт, отбрасывает часть перед двоеточием, если таковая имеется, и выводит хост и порт:
localsocksdynamic 8080
localwebserverremote 8080
indirectaccesslocal 2222
Затем это передается в в то время как цикл
read
для проверки порта и запуска SSH.