Как избежать соединения awk с awk?

Я недавно обновил свой Arch и проблема, кажется, устранена! Однако до этого я просто определил псевдоним в моем файле .zshrc:

alias resize='killall VBoxClient && VBoxClient-all'

Так что всякий раз, когда мне нужно было исправить размер экрана, я просто вводил эту команду в терминале. Это не совсем то решение, о котором я просил, но оно все равно очень помогло.

3
08.06.2017, 00:31
1 ответ

Вы можете выполнить все обработка текста с помощью одного вызова 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.

3
27.01.2020, 21:21

Теги

Похожие вопросы