脚本中的 wscat 命令,如何传递

Krz*_*tof 8 bash websocket

我可以使用 wscat 连接到 WS,我可以从控制台发送命令,但我不知道如何从脚本传递命令。我尝试了几种方法,并且总是在传递命令之前关闭 WAS。

一般来说,我想要的东西会: 1. 连接到 WS 2. 从列表中一一发送命令 3. 将输入和输出保存到文件

Cha*_*ffy 7

wscat对于这项工作来说,这是一个选择不当的工具;它并不是为了遵循适合脚本使用的约定而编写的(例如在 stderr 而不是 stdout 上保留提示;或者在输出不是 TTY 时抑制提示;或者将 EOF 视为关闭连接的信号)。请考虑websocat

#!/usr/bin/env bash

runscript() {
  commands=( "first command" "second command" "third command" )

  for command in "${commands[@]}"; do
    echo "Writing command to server" >&2
    echo "$command"
    echo "Reading response from server (assuming exactly one line)" >&2
    read -r line
    echo "Received response: $line" >&2
  done

  # kill websocat, even if the websocket doesn't get closed
  kill "$PPID"
}

export -f runscript
websocat ws://echo.websocket.org sh-c:'exec bash -c runscript'
Run Code Online (Sandbox Code Playgroud)


Mal*_*ous 5

对于简单的事情,您可以使用-x参数给出wscat一些 JSON 在建立连接后发送,例如:

wscat --connect ws://example.com -w 1 -x '{"action": "helloWorld"}'
Run Code Online (Sandbox Code Playgroud)

发送消息后,将-w 1等待一秒钟,以防回复。

当然,这样做会连接到 WebSocket,发送消息,等待给定时间的回复,然后断开连接,因此如果您需要保持消息之间的连接打开,那么这不是一个很好的选择。