我有两个文件:server.sh
并且client.sh
,服务器将以下文本发送到客户端
客户端.sh
porta_cliente=5678
porta_servidor=8765
nc -l $porta_cliente | sh
服务器.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
如您所见,服务器通过 netcat 向客户端发送文本(解释为多行命令),在这些命令上,我试图将用户输入传递给特定文件,然后使用 case 语句检查用户输入是否Cadastrar
,Entrar
或者Sair
,第一个对话框部分工作正常,但case 'cat log servidor' in
没有被执行(即使bash -x server.sh
我找不到导致这个问题的原因)
您的
dialog
命令,其输出被重定向到文件logservidor
,正在远程端执行。但是应该读取其输出的行:...正在本地执行,同时构建here-document。这是因为 here-documents 在定义时会执行各种扩展,包括命令替换。
您可以通过引用延迟此扩展(以便仅在执行脚本时发生)
EOF
:但这也会延迟脚本中变量的扩展,例如
$ip
. 如果您希望立即扩展这些变量,但cat
稍后执行命令,则可以转义反引号:您也可以在尝试发送和执行它之前通过查看最终命令来自己调试问题。将第一行替换为
然后进去
tmp-doc
看看有什么东西会送过来nc
。