Como eu não sou realmente um usuário zsh
, vou escrever uma sh
solution ( zsh
deve ser capaz de executá-lo também).
A essência geral é criar uma lista com um ssh -t hostname
bit para cada opção de linha de comando, exceto a última, e depois executar essa lista como um comando.
#!/bin/sh
argn=$#
i=0
for arg do
shift
i=$(( i + 1 ))
if [ "$i" -lt "$argn" ]; then
set -- "$@" ssh -t "$arg"
else
set -- "$@" "/pathtofile/$arg/log.log"
fi
done
command "$@"
Executando isso como
sh script.sh alpha beta gamma zeta
criaria a lista
ssh -t alpha ssh -t beta ssh -t gamma /pathtofile/zeta/log.log
O último comando no script executaria isso como um comando.
A lista é construída em $@
, a lista de parâmetros posicionais, que no início do script contém os parâmetros da linha de comando do script. O loop registra quando o último elemento da lista original é encontrado e o trata especialmente.
O comando set
, quando usado como acima, será anexado à lista e shift
removerá o primeiro elemento da lista (aquele que estamos processando atualmente).
Tenho certeza de que isso poderia ser mais curto e mais elegante com a sintaxe zsh
-específica.