Tenho dois arquivos: server.sh
e client.sh
, o servidor envia o seguinte texto para o cliente
cliente.sh
porta_cliente=5678
porta_servidor=8765
nc -l $porta_cliente | sh
server.sh
porta_cliente=5678
porta_servidor=8765
nc $ip $porta_cliente <<-EOF
dialog --stdout --backtitle 'Bem vindo ao SEPA 0.1' --title 'Menu inicial' --menu 'Escolha uma opção:' 0 0 0 \
Cadastrar 'Criar um novo usuário' \
Entrar 'Fazer login com sua conta' \
Sair 'Encerrar o SEPA' > logservidor
# WORKING FINE UNTIL HERE!
case `cat logservidor` in
"Cadastrar")
echo "LOG: case is being executed" > /dev/tcp/"$ip"/"$porta_servidor"
dialog --stdout --msgbox 'CADASTRAR' 0 0 > /dev/tcp/"$ip"/"$porta_servidor"
;;
"Entrar")
echo "LOG: case is being executed"
echo "LOGIN SELECIONADO" > /dev/tcp/"$ip"/"$porta_servidor"
;;
"Sair")
echo "LOG: case is being executed"
echo "SAIR SELECIONADO" > /dev/tcp/"$ip"/"$porta_servidor"
;;
esac
EOF
Como você pode ver, o servidor envia um texto (interpretado como várias linhas de comandos) para o cliente através do netcat, nesses comandos, estou tentando passar a entrada do usuário para um arquivo específico e, em seguida, use uma instrução case para verifique se a entrada do usuário é Cadastrar
, Entrar
ou Sair
, a primeira parte do diálogo está funcionando bem, mas case 'cat log servidor' in
não está sendo executada (mesmo com bash -x server.sh
eu não consegui encontrar o que está causando esse problema)
Seu
dialog
comando, cuja saída é redirecionada para o arquivologservidor
, está sendo executado na extremidade remota. Mas a linha que deveria ler sua saída:...está sendo executado localmente, durante a construção do here-document. Isso porque os here-documents executam várias expansões, incluindo substituição de comandos, no momento em que são definidos.
Você pode atrasar essa expansão (para que aconteça apenas quando o script for executado) citando
EOF
:Mas isso também atrasaria a expansão de variáveis no script, como
$ip
. Se você deseja que essas variáveis sejam expandidas imediatamente, mas ocat
comando executado posteriormente, você pode escapar dos acentos graves:Você também pode depurar o problema observando o comando final antes de tentar enviá-lo e executá-lo. Substitua a primeira linha por
Em seguida, olhe
tmp-doc
para ver o que teria sido enviadonc
.