Experimente o seguinte script:
#!/usr/bin/env bash
shopt -s nocasematch
for word in $(grep -i "^[^#\S]*Host\(name\)\?" ~/.ssh/config | paste -s -); do
case "$word" in
"Host")
type=host
;;
"Hostname")
type=hostname
;;
*)
case "$type" in
"host")
host=$word
;;
"hostname")
hostname=$word
if [[ "$hostname" == *uberspace.de ]]; then
ssh -v $host "git -C bin pull" # Connecting to $hostname
fi
unset host hostname
;;
esac
esac
done
Primeiro grep
em for
loop é capturar todas as linhas com Host
e Hostname
. Então tr
está juntando todos eles juntos em uma linha. Então é uma questão de analisar cada palavra individual.
A análise de cada palavra reage às palavras Host
e Hostname
(insensivelmente quando nocasematch
está ativado), quando essas palavras-chave são encontradas e, com base em seu tipo, elas são atribuídas a host
e hostname
variable . Como o valor para o nome do host é esperado para ser o último, estamos executando nosso comando lá, uma vez que o nome do host corresponde a uberspace.de
. Depois que terminamos a análise do nome do host, desatribuímos os valores, para que possamos pegar o novo.
Para depurar o script, execute-o como: bash -x ./script.sh
.