使用 Slack Webhook 通过 curl 发送终端命令的输出

Sending Output of Terminal Command via curl using a Slack Webhook

为了上下文,我正在开发一个允许“远程”访问 NVidia Xavier 的系统。不幸的是,在目前的外壳中,除非将整个装置拆开,否则显示端口完全被阻塞。 USB 端口可用,用于连接无线键盘和鼠标。我已经编写了一个可以通过 SSH 执行的 Gstreamer 管道,它将捕获显示并将其流式传输到另一台本地计算机。

我运行遇到的问题是,由于设备是便携式的,它连接的网络和后续 IP 会不断变化,但我需要知道它才能 SSH进入单位。

我正在尝试编写一个(我认为很简单的)bash 脚本,该脚本将在启动时通过 webhook 将时间戳和设备的 IP 发送到 Slack 通道,实际上如下所示命令(IP 和 slack URL 广义):

curl -X POST -H 'Content-type: application/json' --data '{"text":"Tue Jul 14 15:26:50 EDT 2020 IP: XX.X.X.XX"}' https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX

每次脚本 运行 时,JSON 负载都会发生变化,具体取决于 hostname -Idate 的结果。

我尝试使用以下方法创建一个包含所需数据的数组:

command=( -X POST -H 'Content-type: application/json' --data \'{\"text\":\")

command+=("$(date)")

command+=("$(hostname -I)")

command+=(\"}\' https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX)

curl command

但收到错误 curl: (6) Could not resolve host: command

我几乎没有编写 bash 脚本的经验,很可能遗漏了一些对其他人来说非常明显的东西。但是,使用 echo "${command[*]}" 确实会显示与工作命令匹配的输出。任何建议将不胜感激。

这是在 bash 中使用变量时的一个常见错误 - 当您设置它们时,您没有为它们添加前缀 $,但是当您引用它们时,它们必须带有前缀a $ 以便进行扩展。所以在你的情况下,你可能想使用: curl $command 而不是 curl command